社区讨论

AC*2 WA*28 求条

AT_abc242_g[ABC242G] Range Pairing Query参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@mm4kyqhk
此快照首次捕获于
2026/02/27 15:38
2 周前
此快照最后确认于
2026/03/01 10:35
上周
查看原帖
rt,马峰良好
CPP
#include<bits/stdc++.h>
#define int long long

using namespace std;

const int MAXN = 3e6 + 1;

int n, m, sum, len, a[MAXN], cnt[MAXN];
struct node {
	int l, r, id, ans;
}q[MAXN];
bool cmp(node a, node b) {
	if(a.l / len == b.l / len) {
		return a.r < b.r;
	}
	return a.l < b.l;
}
bool cmp2(node a, node b) {
	return a.id < b.id;
}
void ADD(int x) {
	sum += (cnt[a[x]] % 2 == 1);
	cnt[a[x]]++;
}
void SUB(int x) {
	sum -= (cnt[a[x]] % 2 == 0);
	cnt[a[x]]--;
}

signed main() {
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	cin >> n;
	len = sqrt(n);
	for(int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	cin >> m;
	for(int i = 1; i <= m; i++) {
		cin >> q[i].l >> q[i].r;
		q[i].id = i;
	}
	sort(q + 1, q + m + 1, cmp);
	int l = 1, r = 0;
	for(int i = 1; i <= m; i++) {
		while(l < q[i].l) {
			SUB(l++);
		}
		while(l > q[i].l) {
			ADD(--l);
		}
		while(r > q[i].r) {
			SUB(r--);
		}
		while(r < q[i].r) {
			ADD(++r);
		}
		q[i].ans = sum;
	}
	sort(q + 1, q + m + 1, cmp2);
	for(int i = 1; i <= m; i++) {
		cout << q[i].ans << "\n";
	}
	return 0;
}

回复

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

正在加载回复...