题目链接
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const int N = 1000010, Q = 1000010;
int n, q, len, a[N], id[N], L = 1, R, cnt[N], ans;
struct P {
int l, r, id, ans;
}p[Q];
bool cmp1 (P a, P b) {
if (id[a.l] != id[b.l]) return a.l < b.l;
else return (id[a.l] & 1) ? a.r < b.r : a.r > b.r;
}
bool cmp2 (P a, P b) {
return a.id < b.id;
}
void add (int x) {
if (cnt[a[x]] & 1) ans ++;
cnt[a[x]] ++;
}
void del (int x) {
if (!(cnt[a[x]] & 1)) ans --;
cnt[a[x]] --;
}
int main () {
scanf("%d", &n);
for (int i = 1; i <= n; i ++)
scanf("%d", &a[i]);
scanf("%d", &q);
len = n / sqrt(n);
for (int i = 1; i <= n; i ++)
id[i] = (i - 1) / len + 1;
for (int i = 1; i <= q; i ++) {
scanf("%d%d", &p[i].l, &p[i].r);
p[i].id = i;
}
sort(p + 1, p + q + 1, cmp1);
for (int i = 1; i <= q; i ++) {
while (L > p[i].l) {
L --;
add(L);
}
while (R < p[i].r) {
R ++;
add(R);
}
while (L < p[i].l) {
del(L);
L ++;
}
while (R > p[i].r) {
del(R);
R --;
}
p[i].ans = ans;
}
sort(p + 1, p + q + 1, cmp2);
for (int i = 1; i <= q; i ++)
printf("%d\n", p[i].ans);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】