社区讨论
萌新刚学莫队求调
P4462[CQOI2018] 异或序列参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mhjudxat
- 此快照首次捕获于
- 2025/11/04 08:40 4 个月前
- 此快照最后确认于
- 2025/11/04 08:40 4 个月前
CPP
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
const int N = 1e6+10;
int n, m, ans[N], b[N], cnt[N], sum, k, len;
struct node {
int l, r, num, id;
bool operator < (const node &x) const {
if (num != x.num) return l < x.l;
else {
if (num & 1) return r < x.r;
else return r > x.r;
}
}
} a[N];
void add(int x) {
sum += cnt[b[x] ^ k];
cnt[b[x]]++;
return ;
}
void del(int x) {
cnt[b[x]]--;
sum -= cnt[b[x] ^ k];
return ;
}
signed main() {
cin >> n >> m >> k;
len = cbrt(n*n);
for (int i = 1; i <= n; i++)
cin >> b[i], b[i] = b[i] ^ b[i - 1];
for (int i = 1; i <= m; i++) {
cin >> a[i].l >> a[i].r;
a[i].l--;
a[i].num = a[i].l / len + 1, a[i].id = i;
}
sort(a + 1, a + 1 + n);
int l = 0, r = 0;
cnt[0] = 1;
sum = (k == 0);
for (int i = 1; i <= m; i++) {
while (l > a[i].l) add(--l);
while (r < a[i].r) add(++r);
while (l < a[i].l) del(l++);
while (r > a[i].r) del(r--);
ans[a[i].id] = sum;
}
for (int i = 1; i <= m; i++)
cout << ans[i] << endl;
return 0;
}
1、2、3 WA了,不知道哪里错了。
回复
共 0 条回复,欢迎继续交流。
正在加载回复...