atcoder#ABC246H. [ABC246Ex] 01? Queries

[ABC246Ex] 01? Queries

题目描述

01? のみからなる長さ N N の文字列 S S が与えられます。

また、Q Q 個のクエリ (x1, c1), (x2, c2), , (xQ, cQ) (x_1,\ c_1),\ (x_2,\ c_2),\ \ldots,\ (x_Q,\ c_Q) が与えられます。
ここで、i = 1, 2, , Q i\ =\ 1,\ 2,\ \ldots,\ Q について、xi x_i 1  xi  N 1\ \leq\ x_i\ \leq\ N を満たす整数であり、ci c_i 01? のうちのいずれかの文字です。

i = 1, 2, , Q i\ =\ 1,\ 2,\ \ldots,\ Q の順に、クエリ (xi, ci) (x_i,\ c_i) に関して以下の処理を行ってください。

  1. まず、S S の先頭から xi x_i 文字目を ci c_i に変更する。
  2. その後、「 S S に含まれるすべての ? をそれぞれ独立に 0 または 1 に置き換えて得られる文字列の(連続とは限らない)部分列」としてあり得る空でない文字列の個数を、998244353 998244353 で割ったあまりを出力する。

输入格式

入力は以下の形式で標準入力から与えられる。

N N Q Q S S x1 x_1 c1 c_1 x2 x_2 c2 c_2 \vdots xQ x_Q cQ c_Q

输出格式

Q Q 行出力せよ。i = 1, 2, , Q i\ =\ 1,\ 2,\ \ldots,\ Q について、i i 行目には i i 番目のクエリ (xi, ci) (x_i,\ c_i) に対する答え(すなわち、問題文中の処理 2. における文字列の個数を 998244353 998244353 で割ったあまり)を出力せよ。

题目大意

给定长度为 NN 的仅包含 01? 的字符串 SS,给定 QQ 组询问 (x1,c1),(x2,c2),,(xq,cq)(x_1, c_1), (x_2, c_2), \cdots, (x_q, c_q),每次将原字符串中 xix_i 位置的字符改为 cic_i,然后输出 SS 有多少种非空子序列,? 需任意替换为 01

1N,Q105,1xiN1 \le N, Q \le 10^5, 1 \le x_i \le N

3 3
100
2 1
2 ?
3 ?
5
7
10
40 10
011?0??001??10?0??0?0?1?11?1?00?11??0?01
5 0
2 ?
30 ?
7 1
11 1
3 1
25 1
40 0
12 1
18 1
746884092
532460539
299568633
541985786
217532539
217532539
217532539
573323772
483176957
236273405

提示

制約

  • 1  N, Q  105 1\ \leq\ N,\ Q\ \leq\ 10^5
  • N, Q N,\ Q は整数
  • S S 01? のみからなる長さ N N の文字列
  • 1  xi  N 1\ \leq\ x_i\ \leq\ N
  • ci c_i 01? のうちいずれかの文字

Sample Explanation 1

- 1 1 個目のクエリで、まず S = S\ = 110 に変更されます。S = S\ = 110 の部分列としてあり得る文字列は、0110111105 5 個です。よって、1 1 個目のクエリに対する答えとして 5 5 を出力します。 - 2 2 個目のクエリで、まず S = S\ = 1?0 に変更されます。S = S\ = 1?0?0 または 1 に置き換えて得られる文字列は、1001102 2 つです。 これらのどちらかの部分列としてあり得る文字列は、010010111001107 7 個です。よって、2 2 個目のクエリに対する答えとして 7 7 を出力します。 - 3 3 個目のクエリで、まず S = S\ = 1?? に変更されます。S = S\ = 1???0 または 1 に置き換えて得られる文字列は、1001011101114 4 つです。 これらのいずれかの部分列としてあり得る文字列は、010001101110010111011110 10 個です。よって、3 3 個目のクエリに対する答えとして 10 10 を出力します。

Sample Explanation 2

998244353 998244353 で割ったあまりを出力することに注意してください。