M - NAND Editorial by Yoyoyo8128

ユーザ解説

NANDの性質を考えます。bitごとに見て、01列を考えます。

\(A = (\dots , 0,1,\dots,1)\) のように途中で \(0\) が来る場合、そこまでの NAND を取ると必ず \(1\) になります。よって、最後の \(0\) を見て、その後の全ての要素が \(1\) の時を考えます。これは、\(1,0,1,0,\dots\) のように変化するので、最後の \(1\) の長さが偶数なら \(1\) になります。

\(A = (0,1,\dots,1)\) の場合は、\(0,1,0,1,\dots\) のように変化するので、全体の長さが偶数なら、\(1\) になります。

\(A= (1,\dots,1)\) の場合は、\(1,0,1,0,\dots\) のように変化するので、全体の長さが奇数なら、\(1\) になります。

よって、最後の \(0\) の要素の位置を取得すれば解けますが、これは、 \(\max\) を取得するセグメント木で解けます。

posted:
last update: