問題一覧 > 通常問題

No.2611 Count 01

レベル : / 実行時間制限 : 1ケース 6.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 36
作問者 : 蜜蜂 / テスター : Mitarushi
0 ProblemId : 8897 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2024-01-19 19:03:37

問題文

以下では、 01 のみからなる文字列を 0101 列と呼びます。

0101xx に対し、 f(x)f \left( x \right)xx が含む 0 の数と 1 の数の積とします。
また g(x)g \left( x \right) を以下のように定めます。

  • x=n|x| = n として n(n+1)2\frac{n \left( n+1 \right)}{2} 通りある xx の連続部分文字列 xx' 全てについて、 f(x)f \left( x' \right) を足し合わせた値。

長さ NN0101SS が与えられます。 QQ 個のクエリが与えられるので、順に処理してください。
クエリは次の 22 種類のいずれかです。

  • 1 i : SSii 文字目を入れ替える。すなわち ii 文字目が 0 なら 1 に、 1 なら 0 にする。(変更クエリ)
  • 2 l r : SSll 文字目から rr 文字目までの部分文字列を SS' とする。 g(S)g \left( S' \right)998244353998244353 で割った余りを出力する。(出力クエリ)

入力

N  QN\ \ Q
SS
query1\mathrm{query}1
query2\mathrm{query}2
\vdots
queryQ\mathrm{query}Q
各クエリでの入力は以下に示す 22 つの形式のいずれかです。
1 i
2 l r

  • 1N,Q1.5×1051 \leq N,Q \leq 1.5 \times 10^5
  • SS は長さ NN0101
  • 1iN1 \leq i \leq N
  • 1lrN1 \leq l \leq r \leq N
  • N,Q,i,l,rN,Q,i,l,r は全て整数
  • 出力クエリは 11 個以上与えられる

出力

出力クエリが MM 個あるとして MM 行出力してください。 mm 行目には出力クエリの中で mm 番目のクエリに対応する答えを出力してください。

サンプル

サンプル1
入力
6 6
010110
2 1 3
1 3
2 4 5
1 5
2 4 5
2 1 1
出力
4
0
1
0

  • 11 番目のクエリにおいて SS'010 なので g(S)=4g \left( S' \right) = 4 です。
  • 22 番目のクエリの後、 SS011110 です。
  • 33 番目のクエリにおいて SS'11 なので g(S)=0g \left( S' \right) = 0 です。
  • 44 番目のクエリの後、 SS011100 です。
  • 55 番目のクエリにおいて SS'10 なので g(S)=1g \left( S' \right) = 1 です。
  • 66 番目のクエリにおいて SS'0 なので g(S)=0g \left( S' \right) = 0 です。

サンプル2
入力
1 5
0
1 1
2 1 1
2 1 1
1 1
2 1 1
出力
0
0
0

サンプル3
入力
38 17
00011111001010001001101100101011101110
2 12 19
1 8
2 25 36
1 19
2 1 11
2 1 3
2 6 33
2 14 21
1 8
2 7 12
2 5 36
2 29 35
2 17 18
1 16
1 9
2 11 25
1 27
出力
100
529
387
0
14391
112
43
24138
64
1
1236

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。