社区讨论
妹子回滚莫队0pts 悬我QQ
P4137Rmq Problem / mex参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @ltipdfdy
- 此快照首次捕获于
- 2024/03/08 21:39 2 年前
- 此快照最后确认于
- 2024/03/09 08:35 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+10;
int n,m,len,a[maxn],ans[maxn],tong[maxn],f[maxn];
struct p{
int l,r,id;
}t[maxn];
int cmp(p u,p v){
if(u.l/len==v.l/len)return u.r>v.r;
return u.l<v.l;
}
int wok(int x){
return (x-1)/len;
}
int main(){
std::ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>m; len=sqrt(n);
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=m;i++){
cin>>t[i].l>>t[i].r; t[i].id=i;
}
sort(t+1,t+1+m,cmp);
int l=1,r=1,mex=0; tong[a[1]]++;
if(a[1]==0)mex=1;
for(int i=1;i<=n;i++)tong[a[i]]++;
for(int i=0;i<2e5;i++){
if(tong[i]==0){
f[1]=i; break;
}
}
for(int i=1;i<=n;i++){
tong[a[i]]--;
if(tong[a[i]]==0&&a[i]<f[i]){
f[i+1]=a[i];
}
else f[i+1]=f[i];
}
for(int i=1;i<=m;i++){
if(wok(t[i].l)!=wok(t[i-1].l)){
while(l<wok(t[i].l)*len+1){
tong[a[l]]--; l++;
}
while(r<n){
r++;
tong[a[r]]++;
}
mex=f[wok(t[i].l)*len+1];
}
int mnow=mex;
while(l>wok(t[i].l)*len+1){
l--; tong[a[l]]++;
}
while(l<t[i].l){
tong[a[l]]--;
if(a[l]<mnow&&tong[a[l]]==0){
mnow=a[l];
}
l++;
}
while(r>t[i].r){
tong[a[r]]--;
if(a[r]<mnow&&tong[a[r]]==0){
mnow=a[r];
}
if(a[r]<mex&&tong[a[r]]==0)mex=a[r];
r--;
}
ans[t[i].id]=mnow;
}
for(int i=1;i<=m;i++)cout<<ans[i]<<'\n';
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...