求助WA on #2
查看原帖
求助WA on #2
795344
lfxxx_楼主2024/11/23 16:17
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int n,m,t;
int a[N],b[N],kc[N],xf;
int op[N],lq[N],rq[N];
struct query{int l,r,t,id;}q[N];
int ux[N],uy[N],ry[N];
int cnt[N],tot[N],ans[N];
bool cmp(query q1,query q2)
{
    if(q1.l/t!=q2.l/t)
        return q1.l/t<q2.l/t;
    if(q1.r/t!=q2.r/t)
        return q1.r/t<q2.r/t;
    return q1.t<q2.t;
}
void add(int x)
{
    --tot[cnt[x]];
    ++cnt[x];
    ++tot[cnt[x]];
}
void del(int x)
{
    --tot[cnt[x]];
    --cnt[x];
    ++tot[cnt[x]];
}
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>n>>m;
    t=pow(n,0.6666);
    for(int i=1;i<=n;++i)
        cin>>a[i],kc[++xf]=a[i];
    for(int i=1;i<=m;++i)
    {
        cin>>op[i]>>lq[i]>>rq[i];
        if(op[i]==2)
            kc[++xf]=rq[i];
    }
    sort(kc+1,kc+xf+1);
    xf=unique(kc+1,kc+xf+1)-kc-1;
    for(int i=1;i<=n;++i)
        a[i]=b[i]=lower_bound(kc+1,kc+xf+1,a[i])-kc;
    for(int i=1;i<=m;++i)
        if(op[i]==2)
            rq[i]=lower_bound(kc+1,kc+xf+1,rq[i])-kc;
    int tq=0,tc=0,ver=0;
    for(int i=1;i<=m;++i)
    {
        if(op[i]==1)
        {
            ++tq;
            q[tq].l=lq[i];
            q[tq].r=rq[i];
            q[tq].t=ver;
            q[tq].id=tq;
        }
        else
        {
            ++tc;++ver;
            ux[tc]=lq[i];
            uy[tc]=rq[i];
            ry[tc]=b[ux[i]];
            b[ux[i]]=uy[i];
        }
    }
    sort(q+1,q+tq+1,cmp);
    for(int i=1,l=1,r=0,t=0;i<=tq;++i)
    {
        while(l>q[i].l)
            add(a[--l]);
        while(r<q[i].r)
            add(a[++r]);
        while(l<q[i].l)
            del(a[l++]);
        while(r>q[i].r) 
            del(a[r--]);
        while(t<q[i].t)
        {
            ++t;
            if(q[i].l<=ux[t]&&ux[t]<=q[i].r)
            {
                del(a[ux[t]]);
                a[ux[t]]=uy[t];
                add(a[ux[t]]);
            }
            a[ux[t]]=uy[t];
        }
        while(t>q[i].t)
        {
            if(q[i].l<=ux[t]&&ux[t]<=q[i].r)
            {
                del(a[ux[t]]);
                a[ux[t]]=ry[t];
                add(a[ux[t]]);
            }
            a[ux[t]]=ry[t];
            --t;
        }
        for(ans[q[i].id]=1;tot[ans[q[i].id]];++ans[q[i].id]);
    }
    for(int i=1;i<=tq;++i)
        cout<<ans[i]<<'\n';
}
2024/11/23 16:17
加载中...