【传送门:】
简要题意:
给出一个长度为n的数列,有m个询问,每个询问输入l,r,求出l到r之间没出现过的最小自然数
题解:
同
参考代码:
#include#include #include #include #include using namespace std;struct question{ int l,r,id,d;}q[210000];int belong[210000],L[1100],R[1100],block;bool cmp1(question n1,question n2){ if(belong[n1.l] belong[n2.l]) return false; if(n1.r n2.r) return false; return false;}bool cmp2(question n1,question n2){ return n1.id n) a[i]=n; int t=(i-1)/block+1; belong[i]=t; if(L[t]==0) R[t-1]=i-1,L[t]=i; } R[belong[n]]=n; for(int i=1;i<=m;i++) scanf("%d%d",&q[i].l,&q[i].r),q[i].id=i; sort(q+1,q+m+1,cmp1); int l=1,r=0; memset(d,0,sizeof(d)); for(int i=1;i<=m;i++) { while(l q[i].l) l--,add(a[l]); while(rq[i].r) del(a[r]),r--; q[i].d=solve()-1; } sort(q+1,q+m+1,cmp2); for(int i=1;i<=m;i++) printf("%d\n",q[i].d); return 0;}