#icpc2013summerday3j. [icpc2013summer_day3_j]A + B
[icpc2013summer_day3_j]A + B
プログラミングコンテストの合宿で出す問題のアイディアが出ずに困っていたイクタ君は、ある日友人に相談した。
イクタ君「こういうアルゴリズムを使わないと解けないような問題が出したいんですけど、なにかありませんかね?」
友人「それではこういうものを考えたらいいんじゃないですか」
このようにしてその友人は以下のような問題の原案となるアイデアを考えてくれた。
2進数が与えられた時、以下の様なクエリを処理せよ。
-
出力クエリ: max{ を2進数で表したときの、1の数 | }を出力
-
A変更クエリ: の最下位ビットからビット目(0-origin)を反転
-
B変更クエリ: の最下位ビットからビット目(0-origin)を反転
ビット目というのが 0-origin で表されていることに注意せよ。 つまり、の最下位ビットから0ビット目とは最下位ビットを表す。
Input
入力は以下の形式で与えられる。
...
1行目にクエリの数N,2進数A, Bが与えられる。
2~N+1行目には以下の様なクエリが与えられる。
-
Q
-
A
-
B
Qが出力クエリを、A ,B はそれぞれの最下位ビットからビット目、の最下位ビットからビット目を反転させる変更クエリを表している。
Constraints
入力中の各変数は以下の制約を満たす。
-
-
(はの長さ)
-
A というクエリでは
-
B というクエリでは
-
が0になることはない
Output
出力クエリごとに答えを1行に出力せよ。
Sample Input 1
4 10000 00101
Q
A 0
B 1
Q
Output for the Sample Input 1
3
4
最初の出力クエリでは , , なので求めるは10011
次の出力クエリでは , , なので求めるは10111
Sample Input 2
9 0110111101 0010100111
Q
B 4
Q
A 4
Q
B 9
Q
A 8
Q
Output for the Sample Input 2
9
9
9
10
9