CF1535D.Playoff Tournament

普及+/提高

通过率:0%

时间限制:2.00s

内存限制:256MB

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

2k2^k teams participate in a playoff tournament. The tournament consists of 2k−12^k - 1 games. They are held as follows: first of all, the teams are split into pairs: team 11 plays against team 22, team 33 plays against team 44 (exactly in this order), and so on (so, 2k−12^{k-1} games are played in that phase). When a team loses a game, it is eliminated, and each game results in elimination of one team (there are no ties). After that, only 2k−12^{k-1} teams remain. If only one team remains, it is declared the champion; otherwise, 2k−22^{k-2} games are played: in the first one of them, the winner of the game "11 vs 22" plays against the winner of the game "33 vs 44", then the winner of the game "55 vs 66" plays against the winner of the game "77 vs 88", and so on. This process repeats until only one team remains.

For example, this picture describes the chronological order of games with k=3k = 3:

Let the string ss consisting of 2k−12^k - 1 characters describe the results of the games in chronological order as follows:

  • if sis_i is 0, then the team with lower index wins the ii-th game;
  • if sis_i is 1, then the team with greater index wins the ii-th game;
  • if sis_i is ?, then the result of the ii-th game is unknown (any team could win this game).

Let f(s)f(s) be the number of possible winners of the tournament described by the string ss. A team ii is a possible winner of the tournament if it is possible to replace every ? with either 1 or 0 in such a way that team ii is the champion.

You are given the initial state of the string ss. You have to process qq queries of the following form:

  • pp cc — replace sps_p with character cc, and print f(s)f(s) as the result of the query.

2k2^k 支队伍参加一场淘汰赛锦标赛。该锦标赛共进行 2k−12^k - 1 场比赛,赛程安排如下:首先将所有队伍两两分组:第 11 支队伍对阵第 22 支队伍,第 33 支队伍对阵第 44 支队伍(严格按此顺序),依此类推(因此该阶段共进行 2k−12^{k-1} 场比赛)。每场比赛中,失败的队伍被淘汰;每场比赛恰好淘汰一支队伍(无平局)。此后,仅剩 2k−12^{k-1} 支队伍。若只剩一支队伍,则该队被宣布为冠军;否则,再进行 2k−22^{k-2} 场比赛:第一场由“第 11 场 vs 第 22 场”的胜者对阵“第 33 场 vs 第 44 场”的胜者,第二场由“第 55 场 vs 第 66 场”的胜者对阵“第 77 场 vs 第 88 场”的胜者,依此类推。该过程不断重复,直至仅剩一支队伍。

例如,下图描述了当 k=3k = 3 时各场比赛的时间顺序:

设字符串 ss 由 2k−12^k - 1 个字符组成,按时间顺序描述各场比赛结果,规则如下:

  • 若 sis_i 为 0,则第 ii 场比赛中索引较小的队伍获胜;
  • 若 sis_i 为 1,则第 ii 场比赛中索引较大的队伍获胜;
  • 若 sis_i 为 ?,则第 ii 场比赛结果未知(任意一支队伍均可获胜)。

定义 f(s)f(s) 为字符串 ss 所描述锦标赛中可能的冠军数量。称队伍 ii 是锦标赛的一个可能冠军,当且仅当可以将每个 ? 替换为 0 或 1,使得队伍 ii 最终成为冠军。

给定字符串 ss 的初始状态。你需要处理 qq 个如下形式的查询:

  • p c — 将 sps_p 替换为字符 cc,并输出此次查询后 f(s)f(s) 的值。

输入格式

The first line contains one integer kk (1≤k≤181 \le k \le 18).

The second line contains a string consisting of 2k−12^k - 1 characters — the initial state of the string ss. Each character is either ?, 0, or 1.

The third line contains one integer qq (1≤q≤2⋅1051 \le q \le 2 \cdot 10^5) — the number of queries.

Then qq lines follow, the ii-th line contains an integer pp and a character cc (1≤p≤2k−11 \le p \le 2^k - 1; cc is either ?, 0, or 1), describing the ii-th query.

第一行包含一个整数 kk(1≤k≤181 \le k \le 18)。

第二行包含一个由 2k−12^k - 1 个字符组成的字符串——字符串 ss 的初始状态。每个字符为 ?、0 或 1 中的一个。

第三行包含一个整数 qq(1≤q≤2⋅1051 \le q \le 2 \cdot 10^5)——查询次数。

接下来有 qq 行,其中第 ii 行包含一个整数 pp 和一个字符 cc(1≤p≤2k−11 \le p \le 2^k - 1;cc 为 ?、0 或 1 中的一个),描述第 ii 个查询。

输出格式

For each query, print one integer — f(s)f(s).

对于每个查询,输出一个整数——f(s)f(s)。

输入输出样例

  • 输入#1

    3
    0110?11
    6
    5 1
    6 ?
    7 ?
    1 ?
    5 ?
    1 1

    输出#1

    1
    2
    3
    3
    5
    4

输入解题思路,AI测评打分。不知道怎么写?

首页