莫队 WA40 求助

P1903 [国家集训队] 数颜色 / 维护队列

@[yzq_yzq](/user/560006)
by qwq___qaq @ 2022-10-09 23:31:42


@[_sto_pengzijun_orz_](/user/556362) 时间轴莫队吗?
by yzq_yzq @ 2022-10-10 13:54:43


我测了一下,把你的时间轴删了也是40分,说明肯定是时间轴写错了
by yzq_yzq @ 2022-10-10 14:26:46


c,我一个小时没改完
by yzq_yzq @ 2022-10-10 14:30:20


@[yzq_yzq](/user/560006) 我两晚上没改出来
by qwq___qaq @ 2022-10-10 22:42:33


@[_sto_pengzijun_orz_](/user/556362) ```cpp #include<bits/stdc++.h> using namespace std; const int maxn=2e5,maxt=1e6+5; int cnt[maxt],l=1,r,c,n,m,s,len,num,tot,ans[maxn],a[maxn],b[maxn],t[maxn],pre[maxn],nxt[maxn],now[maxn]; struct node{ int l,r,c,id; inline bool operator <(const node &o) const{ return t[l]<t[o.l]||(t[l]==t[o.l]&&t[r]<t[o.r])||(t[l]==t[o.l]&&t[r]==t[o.r]&&c<o.c); } }f[maxn]; inline int read(){ int res=0,f=0; char ch=getchar(); while(ch<'0'||ch>'9'){ f|=(ch=='-'); ch=getchar(); } while(ch>='0'&&ch<='9'){ res=(res<<1)+(res<<3)+(ch^'0'); ch=getchar(); } return f?-res:res; } inline void add(int t){ ++cnt[a[t]]; if(cnt[a[t]]==1) ++s; } inline void del(int t){ if(cnt[a[t]]==1) --s; --cnt[a[t]]; } inline void rgt(int t){//仔细想一想cnt的含义是什么 if(l<=now[t]&&now[t]<=r) del(now[t]); a[now[t]]=nxt[t]; if(l<=now[t]&&now[t]<=r) add(now[t]); } inline void lft(int t){ if(l<=now[t]&&now[t]<=r) del(now[t]); a[now[t]]=pre[t]; if(l<=now[t]&&now[t]<=r) add(now[t]); } int main(){ n=read(),m=read(); for(int i=1;i<=n;++i) a[i]=b[i]=read(); len=pow(n,2.0/3.0); for(int i=1;i<=(n+len-1)/len;++i) for(int j=(i-1)*len+1;j<=min(n,i*len);++j) t[j]=i; for(int i=1;i<=m;++i){ char ch=getchar(); while(ch!='Q'&&ch!='R') ch=getchar(); if(ch=='Q'){ ++num; f[num].l=read(),f[num].r=read(),f[num].c=tot,f[num].id=num; } else{ ++tot; now[tot]=read(); pre[tot]=b[now[tot]]; b[now[tot]]=nxt[tot]=read(); } } sort(f+1,f+num+1); for(int i=1;i<=num;++i){ while(l>f[i].l) add(--l); while(r<f[i].r) add(++r); while(l<f[i].l) del(l++); while(r>f[i].r) del(r--); while(c<f[i].c) rgt(++c); while(c>f[i].c) lft(c--); ans[f[i].id]=s; } for(int i=1;i<=num;++i) printf("%d\n",ans[i]); return 0; }
by E_firework @ 2022-10-12 15:00:38


|