提交时间:2023-08-16 12:09:04
运行 ID: 98625
#include<bits/stdc++.h> using namespace std; #define ll long long template<typename T>inline void read(T &ret){ ret=0;T fh=1;char ch=getchar(); while(!isdigit(ch)){if(ch=='-')fh=-1;ch=getchar();} while(isdigit(ch))ret=(ret<<1)+(ret<<3)+(ch^48),ch=getchar(); ret*=fh; } template<typename T>inline void write(T ret,bool flag){ if(ret<0)putchar('-'),ret*=-1; static char out[25];int top=0; do{out[++top]=(ret%10)^48,ret/=10;}while(ret); for(;top;--top)putchar(out[top]); putchar(flag?' ':'\n'); } const int N=1e5+5; int n,m,a[N],b[N],len,cnt,id[N],kc,ans[N],l=1,r=0,mp[N]; struct qus{ int l,r,d; inline bool operator < (const qus x)const{ return id[l]!=id[x.l]?id[l]<id[x.l]:id[r]<id[x.r]; } }q[N]; inline void add(int i){if(!mp[a[i]]++)++cnt;} inline void del(int i){if(!--mp[a[i]])--cnt;} int main(){ // freopen("karry5307.in","r",stdin); // freopen("karry5307.out","w",stdout); int op,L,R,x; read(n);read(m);kc=sqrt(n); for(int i=1;i<=n;++i){ read(a[i]);b[i]=a[i]; id[i]=(i-1)/kc+1; } if(n<=5000&&m<=5000){ while(m--){ read(op);read(L);read(R); if(op&1){ read(x); for(int i=L;i<=R;++i) a[i]=x; } else{ int aans=0; map<int,bool>mp_; for(int i=L;i<=R;++i) if(!mp_[a[i]]){ ++aans; mp_[a[i]]=1; } write(aans,0); } } return 0; } sort(b+1,b+n+1); len=unique(b+1,b+n+1)-b-1; for(int i=1;i<=n;++i) a[i]=lower_bound(b+1,b+len+1,a[i])-b; for(int i=1;i<=m;++i){ read(op); if(op&1){ puts("Karry5307 ssh HNOI2021!"); return 0; } else{ read(q[i].l); read(q[i].r); q[i].d=i; } } sort(q+1,q+m+1); for(int i=1;i<=n;++i){ while(q[i].l<l)add(--l); while(q[i].r>r)add(++r); while(q[i].l>l)del(l++); while(q[i].r<r)del(r--); ans[q[i].d]=cnt; } for(int i=1;i<=m;++i) write(ans[i],0); return 0; }