Wa+TLE求助

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

改过了(虽然结果没变) ```cpp #include<bits/stdc++.h> using namespace std; const int N=5e5+5; int ans[N],n,m,k;char ch; int c[N],s[N],T,sum,t1,t2; int ul[N],uv[N]; struct node { int l,r,id,up; }opr[N]; bool cmp(node a,node b) { if(a.l/T==b.l/T)return a.r<b.r; return a.l<b.l; } void Delete(int val) { c[s[val]]--; if(c[s[val]]==0)sum--; } void Insert(int val) { if(c[s[val]]==0)sum++; c[s[val]]++; } void Upd(int x,int l,int r) { int loc=ul[x]; if(l<=loc&&loc<=r)Delete(loc); swap(uv[x],s[loc]); if(l<=loc&&loc<=r)Insert(loc); } int main() { ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); cin>>n>>m;T=pow(n,2/3); for(int i=1;i<=n;i++)cin>>s[i]; for(int i=1;i<=m;i++) { cin>>ch; if(ch=='Q'){ opr[++t1].id=t1;opr[t1].up=t2; cin>>opr[t1].l>>opr[t1].r; } else{cin>>ul[++t2]>>uv[t2];} } sort(opr+1,opr+t1+1,cmp); int dx=1,dy=0,dq=0; for(int i=1;i<=t1;i++) { int qx=opr[i].l,qy=opr[i].r,qp=opr[i].up; while(dq<qp){Upd(++dq,qx,qy);} while(dx>qx){Insert(--dx);} while(dy<qy){Insert(++dy);} while(dq>qp){Upd(dq--,qx,qy);} while(dx<qx){Delete(dx++);} while(dy>qy){Delete(dy--);} ans[opr[i].id]=sum; } for(int i=1;i<=t1;i++)cout<<ans[i]<<"\n"; } ```
by jsad @ 2023-10-09 16:25:30


哪个题
by Clebershao_PCL @ 2023-10-09 17:23:25


[《哪个题》](https://www.luogu.com.cn/problem/P1903)
by jsad @ 2023-10-09 17:42:25


|