[BZOJ2120][带修改莫队算法]数颜色
2017-02-21 20:41
274 查看
待修改莫队裸题,打完后发现N^2貌似也能过….
#include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #define N 100010 using namespace std; int n,m,cnt0,cnt1,x,y,block,g,L,R,Ans; char op; int A ,b ,app[1000010],lst ; struct query{ int l,r,t,iAns; friend bool operator <(query x,query y){ if(b[x.l]!=b[y.l]) return b[x.l]<b[y.l]; if(b[x.r]!=b[y.r]) return b[x.r]<b[y.r]; return x.t<y.t; } }Q ; struct modify{ int a,b,t,g; }M ; inline bool back(query a,query b){return a.t<b.t;} inline void reaD(int &x){ char c=getchar(); x=0; for(;!(c>='0'&&c<='9');c=getchar()); for(;c>='0'&&c<='9';x=x*10+c-'0',c=getchar()); } inline void change(int x,int b){ if(x>=L&&x<=R){ if((--app[A[x]])==0) Ans--; if((app[A[x]=b]++)==0) Ans++; }else A[x]=b; } inline void Add(int x){ if((app[x]++)==0) Ans++; } inline void Minus(int x){ if((--app[x])==0) Ans--; } int main(){ reaD(n); reaD(m); block=(int)sqrt(n); for(int i=1;i<=n;i++) reaD(A[i]),lst[i]=A[i]; for(int i=1;i<=n;i++){ b[i]=g; if(i%block==0) ++g; } for(int i=1;i<=m;i++){ while((op=getchar())!='Q'&&op!='R'); reaD(x); reaD(y); if(op=='Q'){ Q[++cnt1].l=x; Q[cnt1].r=y; Q[cnt1].t=i; } else{ M[++cnt0].a=lst[x]; M[cnt0].b=lst[x]=y; M[cnt0].t=i; M[cnt0].g=x; } } sort(Q+1,Q+1+cnt1); int head=0; L=1,R=0; for(int i=1;i<=cnt1;i++){ while(Q[i].t>M[head+1].t&&head+1<=cnt0){ head++; change(M[head].g,M[head].b); } while(Q[i].t<M[head].t&&head){ change(M[head].g,M[head].a); head--; } while(R>Q[i].r) Minus(A[R--]); while(R<Q[i].r) Add(A[++R]); while(L<Q[i].l) Minus(A[L++]); while(L>Q[i].l) Add(A[--L]); Q[i].iAns=Ans; } sort(Q+1,Q+1+cnt1,back); for(int i=1;i<=cnt1;i++) printf("%d\n",Q[i].iAns); }
相关文章推荐
- 【BZOJ】2120: 数颜色 带修改的莫队算法
- BZOJ 2120 数颜色&2453 维护队列 [带修改的莫队算法]【学习笔记】
- bzoj 2120: 数颜色(带修改的莫队算法)
- 【BZOJ2120】数颜色-带修改莫队算法
- BZOJ 2120 数颜色——带修改的莫队算法
- 莫队算法(单点修改)bzoj2120数颜色
- BZOJ 2120: 数颜色/BZOJ 2453: 维护队列 带修改莫队
- [bzoj2120]数颜色【莫队(带修改)】
- bzoj 2120 数颜色 带修改莫队
- BZOJ 2120 数颜色(带修改莫队)
- HYSBZ - 2120:数颜色 (带修改操作的莫队算法)
- [BZOJ]2120 数颜色 带修改莫队
- [BZOJ 2120][数颜色][带修改的莫队]
- bzoj 2120 数颜色 带修改莫队
- 【bzoj2120: 数颜色】带修改莫队
- bzoj2120 数颜色 带修改的莫队
- 【BZOJ-2453&2120】维护队列&数颜色 分块 + 带修莫队算法
- [BZOJ 2120]数颜色:带修改莫队
- [bzoj2120][bzoj2453][莫队算法]数颜色
- [BZOJ2120]数颜色(带修改莫队入门)