社区讨论
萌新求助
CF1000FOne Occurrence参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @loct1wkq
- 此快照首次捕获于
- 2023/10/30 19:16 2 年前
- 此快照最后确认于
- 2023/11/05 05:56 2 年前
RT,此题WA on #3, 不知道为什么,求大佬解答
CPP#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;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...