voidinsert(int x) { int p = 0; for(int i = 30; ~i ; i--) { // s为儿子 auto &s = q[p][x >> i & 1]; // s不存在则创建一个s if(!s) s = ++idx; p = s; } }
intquery(int x) { int ret = 0; int p = 0; for(int i = 30; ~i ; i--) { auto s = x >> i & 1; // 寻找相反的儿子 if(q[p][!s]) { ret += 1 << i; p = q[p][!s]; } else p = q[p][s]; } return ret; }
intmain() { int n; cin >> n; for(int i = 0 ; i < n; i++) { cin >> a[i]; insert(a[i]); } int ret = 0; for(int i = 0 ; i < n; i++) { ret = max(ret, query(a[i])); } cout << ret; return0; }
// 插入一个数 voidinsert(int x) { for(int i = 30; ~i; i--) st[i] += x >> i & 1; }
// 删除一个数 voiddeleted(int x) { for(int i = 30; ~i; i--) st[i] -= x >> i & 1; }
// 计算每一位的个数, 奇数是1, 偶数是0 intquery() { int ret = 0; for(int i = 30; ~i; i--) if(st[i] & 1) ret += 1 << i; return ret; }
intmain() { int n,m; cin >> n >> m; for(int i = 0; i < n; i++) { cin >> a[i]; } // 维护一个固定滑动窗口 int l = 0 , r = 0; for(int i = 0;i < m; i++) insert(a[r++]); int ret = 0; while(r <= n) { ret = max(ret, query()); insert(a[r++]); deleted(a[l++]); } cout << ret; return0; }