RT,此题WA on #3, 不知道为什么,求大佬解答
#include <bits/stdc++.h>
using namespace std;
#define R register int
const int N = 5e5 + 10;
int a[N], cnt[N], n, m, tag[N], Ans[N];
struct node {
int l, r, op, id;
}q[N];
stack <int> s;
bool inline cmp (register node x, register node y) {
return (x.op ^ y.op) ? x.l < y.l : ((x.op & 1) ? x.r < y.r : x.r > y.r);
}
void inline add(int x) {
if(cnt[x] == 1) tag[x] ++;
cnt[x] ++;
if(cnt[x] == 1)
if(tag[x]) tag[x] --;
else s.push(x);
}
void inline del(int x) {
if(cnt[x] == 1) tag[x] ++;
cnt[x] --;
if(cnt[x] == 1)
if(tag[x]) tag[x] --;
else s.push(x);
}
int main () {
scanf("%d", &n);
int size = sqrt(n);
for(R i = 1; i <= n; i ++)
scanf("%d", &a[i]);
scanf("%d", &m);
for(R i = 1; i <= m; i ++) {
scanf("%d%d", &q[i].l, &q[i].r);
q[i].id = i; q[i].op = (q[i].l - 1) / size + 1;
}
sort(q + 1, q + m + 1, cmp);
int l = 1, r = 0;
for(R i = 1; i <= m; i ++) {
while(q[i].l < l) add(a[-- l]);
while(q[i].l > l) del(a[l ++]);
while(q[i].r > r) add(a[++ r]);
while(q[i].r < r) del(a[r --]);
while(!s.empty() && tag[s.top()]) s.pop();
if(!s.empty()) Ans[q[i].id] = s.top();
}
for(R i = 1; i <= m; i ++)
printf("%d\n", Ans[i]);
return 0;
}