题目链接
还有啊TAT,题目说的是 不是 呜呜呜
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline int read()
{
int x = 0, f = 1; char c = getchar();
while(c < '0' || c > '9') { if(c == '-') f = -f; c = getchar(); }
while(c >= '0' && c <= '9') { x = x * 10 + c - '0'; c = getchar(); }
return x * f;
}
const int maxN = 1000006;
const int maxBit = 31;
int n, m;
int p[maxN][maxBit];
int pos[maxN][maxBit];
void add(int x, int r)
{
int id = r;
for(int i = maxBit - 1; i >= 0; -- i ) p[r][i] = p[r - 1][i], pos[r][i] = pos[r - 1][i];
for(int i = maxBit - 1; i >= 0; -- i )
{
if(x >> i & 1)
{
if(!p[r][i]) { p[r][i] = x; pos[r][i] = id; break; }
if(pos[r][i] < id) { swap(p[r][i], x); swap(pos[r][i], id); }
x ^= p[r][i];
}
}
}
int main()
{
int TAT; TAT = read();
while(TAT -- )
{
n = read(); m = read();
for(int i = 1; i <= n; ++ i )
{
int x; x = read();
add(x, i);
}
int lastans = 0;
while(m -- )
{
int op; op = read();
if(op) // 添加
{
int x = read();
add(x ^ lastans, ++n);
}
else
{
int l, r; l = read(); r = read();
l = (l ^ lastans) % n + 1;
r = (r ^ lastans) % n + 1;
if(l > r) swap(l, r);
lastans = 0;
for(int i = maxBit - 1; i >= 0; -- i )
{
if(pos[r][i] >= l)
lastans = max(lastans, lastans ^ p[r][i]);
}
cout << lastans << endl;
}
}
}
return 0;
}