Luogu P4137 Rmq Problem / mex

Posted cjjsb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Luogu P4137 Rmq Problem / mex相关的知识,希望对你有一定的参考价值。

区间mex问题,可以使用经典的记录上一次位置之后再上主席树解决。

不过主席树好像不是很好写哈,那我们写莫队

考虑每一次维护什么东西,首先记一个答案,同时开一个数组记录一下每一个数出现的次数。

然后些比较显然的性质:如果加入一个数时,答案只会增加;同样的删除一个数时,答案只会减小

利用好这些性质我们就愉快地上莫队即可不过复杂度很迷,转移的时候只能近似(O(1))

CODE

#include<cstdio>
#include<cctype>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=200005;
struct data 
{
    int l,r,id;
}q[N];
int a[N],cnt[N],ans[N],n,m,size,blk[N],res,L,R;
inline char tc(void)
{
    static char fl[100000],*A=fl,*B=fl;
    return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
}
inline void read(int &x)
{
    x=0; char ch; while (!isdigit(ch=tc()));
    while (x=(x<<3)+(x<<1)+ch-‘0‘,isdigit(ch=tc()));
}
inline void write(int x)
{
    if (x>9) write(x/10);
    putchar(x%10+‘0‘);
}
inline bool cmp(data a,data b)
{
    return blk[a.l]<blk[b.l]||(blk[a.l]==blk[b.l]&&(blk[a.l]&1?a.r<b.r:a.r>b.r));
}
inline int min(int a,int b)
{
    return a<b?a:b;
}
inline void add(int col)
{
    ++cnt[col]; if (res<col) return; while (cnt[res]) ++res;
}
inline void del(int col)
{
    if (!(--cnt[col])) res=min(res,col);
}
int main()
{
    //freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
    register int i; read(n); read(m); size=sqrt(n);
    for (i=1;i<=n;++i) read(a[i]),a[i]=min(a[i],n+1),blk[i]=(i-1)/size+1;
    for (i=1;i<=m;++i) read(q[i].l),read(q[i].r),q[i].id=i;
    sort(q+1,q+m+1,cmp); L=q[1].l; R=q[1].r;
    for (i=L;i<=R;++i) add(a[i]); ans[q[1].id]=res;
    for (i=2;i<=m;++i)
    {
        while (L>q[i].l) add(a[--L]); while (L<q[i].l) del(a[L++]);
        while (R<q[i].r) add(a[++R]); while (R>q[i].r) del(a[R--]);
        ans[q[i].id]=res;
    }
    for (i=1;i<=m;++i) write(ans[i]),putchar(‘
‘);
    return 0;
}

以上是关于Luogu P4137 Rmq Problem / mex的主要内容,如果未能解决你的问题,请参考以下文章

P4137 Rmq Problem / mex

Luogu4137:Rmq Problem/mex

Luogu4137Rmq Problem/mex (莫队)

luogu4137 Rmq Problem / mex - 莫队

Luogu 4137 Rmq Problem / mex

BZOJ3339:Rmq Problem & BZOJ3585 & 洛谷4137:mex——题解