DOJ logoDOJ
問題
最近追加された問題保存した問題Workbooks
カテゴリDLCコンテストグループチーム掲示板
ランキング
正解数ランキングストリークランキングDOJ Powerランキング
提出状況
問題募集ログイン新規登録
DOJ logoDOJ

OI形式のサブタスク採点、Eloレーティング、Discord認証を備えたオンラインジャッジです。

問題
問題一覧カテゴリ
コミュニティ
コンテストランキング掲示板お知らせ外部のコンテストを開催するガイド
アカウント
ログイン新規登録ジャッジ状態
ポリシー
利用規約DLCの利用規則プライバシーAPI 文書言語ランタイムコンテストの順位報酬レーティングとパフォーマンス
© 2026 DOJ
All rights reserved
解説

MEXOR

問題に戻る

解説

P(l,r)P(l,r)P(l,r) を、Al,…,ArA_l,\ldots,A_rAl​,…,Ar​ に含まれる 000 の個数の偶奇とします。すべての要素を長さ 111 の区間に分けた場合の XOR 値は P(1,N)P(1,N)P(1,N) です。

区間 [l,r][l,r][l,r] 内の単独区間を一つの区間に置き換えると、XOR 値の変化量は MEX(l,r)⊕P(l,r)\mathrm{MEX}(l,r)\oplus P(l,r)MEX(l,r)⊕P(l,r) です。したがって、互いに重ならない区間を選び、それぞれの変化量を XOR する問題として考えられます。

MEX が 000 の区間の変化量は 000 です。MEX が 111 の区間には 111 が含まれません。000 が奇数個なら変化量は 000 であり、偶数個なら、その区間内にある連続する二つの 00 の位置の間の、 を含まない区間に置き換えられます。この短い区間の変化量は です。

次に MEX が m≥2m\ge2m≥2 の区間を考えます。その内部から 0,1,…,m−10,1,\ldots,m-10,1,…,m−1 をすべて含む最短の部分区間 [u,v][u,v][u,v] を選びます。両端の値は 未満で、部分区間内にそれぞれちょうど一度だけ現れます。このような区間を と呼びます。左端を固定して出現回数と MEX を更新することで列挙できます。

除去した部分に含まれる 000 が偶数個なら、本質的な区間だけで同じ変化量を得られます。奇数個なら、元の区間内で本質的な区間の左側または右側にある最も近い 000 まで拡張します。これで 000 がちょうど一つ増え、元の区間に mmm が存在しないため MEX は変わりません。よって、本質的な区間と、MEX を変えない左右いずれか一方への拡張だけを候補にすれば十分です。候補の総数は O(N)O(N)O(N) 個です。

dp[i]dp[i]dp[i] を、接頭区間 [1,i][1,i][1,i] 内で互いに重ならない候補を選んで得られる変化量の XOR 値の集合とします。位置 iii を使わない場合と、右端が iii の候補 [l,i][l,i][l を選び、 の各値にその変化量を XOR する場合を遷移させます。

列全体の MEX を GGG とすると、任意の区間の MEX は GGG 以下です。XOR 値は 2⌈log⁡2(G+1)⌉2^{\lceil\log_2(G+1)\rceil}2⌈log2​(G+1 未満なので、ビット集合を用いた DP により時間計算量 、空間計算量 で解けます。答えは に対する の最大値です。

0
111
111
mm
m
本質的な区間
,
i
]
dp[l−1]dp[l-1]dp[l−1]
)⌉
O(N2)O(N^2)O(N2)
O(N2)O(N^2)O(N2)
x∈dp[N]x\in dp[N]x∈dp[N]
x⊕P(1,N)x\oplus P(1,N)x⊕P(1,N)
Solution written by GPT6