社区讨论

初学OI,求大佬查错

P4735最大异或和参与者 3已保存回复 10

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
10 条
当前快照
1 份
快照标识符
@mi7up5k7
此快照首次捕获于
2025/11/21 03:55
4 个月前
此快照最后确认于
2025/11/21 03:55
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;

/*
inline int read() {
  int x = 0; char c = getchar();
  while (!isdigit(c)) c = getchar();
  while (isdigit(c)) x = x*10 + c-'0', c = getchar();
  return x;
}

inline char readc() {
  char c = getchar();
  while (c != 'A' || c != 'Q') c = getchar();
  return c;
}
*/

const int N = 3e5 + 10;

int n, m, sum;
int cnt, root[N];
struct Node {
  int size, ch[2];
} p[N << 5];

void ins(int &x, int val, int dep) {
  if (dep < 0) return;
  int k = val & (1<<dep);
  p[++cnt] = p[x], x = cnt;
  ++p[x].size;
  ins(p[x].ch[k], val, dep-1);
}

int query(int x, int y, int val, int dep) {
  if (dep < 0) return 0;
  int k = val & (1<<dep);
  int c = p[p[y].ch[k^1]].size - p[p[x].ch[k^1]].size;
  if (c > 0)
    return (1<<dep) | query(p[x].ch[k^1], p[y].ch[k^1], val, dep-1);
  else
    return query(p[x].ch[k], p[y].ch[k], val, dep-1);
}

int main() {
  cin >> n >> m;
  ins(root[0], 0, 22);
  for (int i = 1; i <= n; ++i) {
    int x; scanf("%d", &x);
    sum ^= x;
    root[i] = root[i-1];
    ins(root[i], sum, 22);
  }
  for (int i = 1; i <= m; ++i) {
    char op; cin >> op;
    if (op == 'A') {
      int x; scanf("%d", &x);
      sum ^= x;
      root[n+1] = root[n], ++n;
      ins(root[n], sum, 22);
    } else {
      int l, r, x;
      scanf("%d%d%d", &l, &r, &x), --l, --r;
      printf("%d\n", query(root[l-1], root[r], x^sum, 22));
    }
  }
  return 0;
}

回复

10 条回复,欢迎继续交流。

正在加载回复...