問題一覧 > 通常問題

No.2935 Division Into 3 (Mex Edition)

レベル : / 実行時間制限 : 1ケース 5.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 8
作問者 : nouka28 / テスター : amesyu 👑 loop0919 kusirakusira hirayuu_yc mymelochan tnodino
3 ProblemId : 11393 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2024-10-12 10:53:37

問題文

長さ NN の数列 A=(A1,A2,,AN)A=(A_1,A_2,\dots,A_N) が与えられます。以下の QQ 個のクエリに答えてください。

  • ii 番目のクエリ:整数 Li,RiL_i,R_i が与えられる。 B=(ALi,ALi+1,,ARi)B=(A_{L_i},A_{L_i+1},\dots,A_{R_i}) に対して以下の問題を解け。

    • BB33 つの非空かつ連続とは限らない部分列 B1,B2,B3B_1,B_2,B_3 に分解する。mex(B1)+mex(B2)+mex(B3)\mathrm{mex}(B_1)+\mathrm{mex}(B_2)+\mathrm{mex}(B_3) としてありうる値の最大値を求めよ。なお、問題文の制約から BB の長さは 33 以上になるため、 33 つの非空な部分列に分解する方法は必ず 11 つ以上存在する。

但し、あなたはこのクエリにオンラインで答える必要があります。

「オンラインでクエリに答える」とは、あるクエリへの回答を行った後で次のクエリが判明することを指します。

このため、 ii 個目のクエリの代わりに、このクエリを暗号化した入力 αi,βi\alpha_i,\beta_i が与えられます。以下の手順で本来の ii 個目のクエリを復元して回答してください。

  • ans0=0,ansi=ans_0=0,ans_i=( ii 番目のクエリの答え ) とする。
  • このとき、クエリの復元は以下のようにして行うことができる。
    • Li=αiansi1L_i=\alpha_i\oplus ans_{i-1}
    • Ri=βiansi1R_i=\beta_i\oplus ans_{i-1}

但し、 xyx\oplus yxxyy のビット単位XOR を表します。

制約

  • 1N1051\leq N\leq 10^5
  • 0Ai1050\leq A_i\leq 10^5
  • 1Q1051\leq Q\leq 10^5
  • 暗号化されたクエリに対して、以下が成立する。
    • 0αi,βi10180\leq\alpha_i,\beta_i\leq 10^{18}
  • 復元した後のクエリに対して、以下が成立する。
    • 1LiRiN1\leq L_i\leq R_i\leq N
    • RiLi2R_i-L_i\geq 2

入力

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

NN
A1A_1 A2A_2 \dots ANA_N
QQ
α1\alpha_1 β1\beta_1
α2\alpha_2 β2\beta_2
\vdots
αN\alpha_N βN\beta_N

出力

最後に改行してください。

サンプル

サンプル1
入力
10
5 4 1 0 3 2 1 7 3 0
5
1 10
11 2
5 12
7 1
4 15
出力
8
6
6
5
8

11 つ目のクエリについて説明します。 B=(5,4,1,0,3,2,1,7,3,0)B=(5,4,1,0,3,2,1,7,3,0) です。

これを B1=(5,4,1,0,3,2),B2=(1,7,0),B3=(3)B_1=(5,4,1,0,3,2),B_2=(1,7,0),B_3=(3) と分解すると mex(B1)+mex(B2)+mex(B3)=8\mathrm{mex}(B_1)+\mathrm{mex}(B_2)+\mathrm{mex}(B_3)=8 になります。

この 88 より大きくなる方法は存在しないので、このクエリの答えは 88 になります。

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

サンプル3
入力
20
14 2 3 2 2 12 15 1 9 15 3 4 0 14 1 0 5 2 0 7
10
2 18
3 30
10 28
10 7
6 19
11 25
15 26
8 25
11 29
7 31
出力
10
8
11
0
9
9
9
9
11
5

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