Cycle XOR Walk
問題文
N 頂点 N 辺の有向グラフがある。
このグラフの辺 i は 頂点 i から頂点 i+1 へ(1≤i≤N) 繋いでいる。
(辺 N は頂点 N から 頂点1へ繋いでいるものとする。)
また、各頂点には 重み があり、頂点 i の重みは Wi である。
次の Q 個のクエリに答えよ。(1≤j≤Q)
- 頂点 sj から tj への walk のうち、
walk に含まれる頂点の重みのビット単位 XOR の最大値を求めよ。
- 頂点 sj から tj への walkとは
直感的には、「頂点 sj から tj への経路であって、
同じ頂点や同じ辺を複数回通っても良いもの」である。
walk に含まれる頂点とは、頂点の列 (v1,...,vk) であって、以下の条件を全て満たすものである。
- v1=sj である。
- 全ての (1≤i≤k−1) について、頂点 vi と頂点 vi+1 を繋ぐ辺が存在する。
- vk=tj である。
- ビット単位 XOR 演算とは
非負整数 A,B のビット単位 XOR である A XOR B は、以下のように定義される。
- A XOR B を2進表記した際の 2k(k≤0) の位の数は、
A,B を2進表記した際の 2k の位の数のうち一方のみが 1 であれば 1、
そうでなければ 0である。
例えば、3XOR5=6 である。(二進表記:011XOR101=110)
一般に k 個の非負整数 p1,p2,p3,...,pk のビット単位 XOR は
(...((p1XORp2)XORp3)XOR...XORpk) と定義され、これは p1,p2,p3,...,pkの順番によらないことが証明できる。
制約
- 2≤N≤105
- 0≤Wi<230(1≤i≤N)
- 1≤Q≤105
- 1≤sj,tj≤N(1≤j≤Q)
- sj=tj
入力
入力はすべて整数である。
N
W_1 W_2 ... W_N
Q
s_1 t_1
s_2 t_2
...
s_Q t_Q
出力
各クエリ 1≤j≤Q について、頂点 sj から tj への walk のうち、
walk に含まれる頂点の重みのビット単位 XOR の最大値を1行づつ出力せよ。
サンプル
例えば 1→2→3 と移動すると、
この walk に含まれる頂点の重みのビット単位 XOR は1XOR2XOR4=7 となります。
これよりも頂点の重みのビット単位 XOR の値を大きくすることはできないので、
7 を出力します。このような walk は他にも、1→2→3→4→1→2→3→4→1→2→3 などが考えられます。
入力2
5
16 17 3 4 8
2
1 3
2 3
入力3
6
55 17 30 42 18 76
3
1 3
2 6
5 4