提交时间:2023-08-16 12:15:26
运行 ID: 98663
#include<bits/stdc++.h> #define int long long using namespace std; int n; const int N=2e5+7; int a[N]; int cnt[N]; struct node { int op,l,r,x; }q[N]; bool cmp(node x,node y) { if(x.l==y.l) return x.r<y.r; return x.l<y.l; } int now=0; void add(int x) { cnt[a[x]]++; if(cnt[a[x]]==1) now++; } void del(int x) { cnt[a[x]]--; if(cnt[a[x]]==0) now--; } int b[N]; int m; int bb[N]; signed main() { cin>>n>>m; for(int i=1;i<=n;i++) { cin>>a[i]; bb[i]=a[i]; } int flag=0; for(int i=1;i<=m;i++) { cin>>q[i].op>>q[i].l>>q[i].r; if(q[i].op==1) { cin>>q[i].x; flag=1; } } if(flag) { for(int ii=1;ii<=m;ii++) { int op=q[ii].op,l=q[ii].l,r=q[ii].r; if(op==1) { int x=q[ii].x; for(int i=l;i<=r;i++) a[i]=x; } else { int tot=0; for(int i=l;i<=r;i++) b[++tot]=a[i]; int len=unique(b+1,b+1+tot)-b-1; cout<<len<<endl; for(int i=1;i<=tot;i++) b[i]=0; } } } else { sort(bb+1,bb+1+n); int len=unique(bb+1,bb+1+n)-bb-1; for(int i=1;i<=n;i++) { int id=lower_bound(bb+1,bb+1+len,a[i])-bb; a[i]=bb[id]; } sort(q+1,q+1+m,cmp); int ll=1,rr=0; for(int i=1;i<=m;i++) { int l=q[i].l,r=q[i].r; while(rr<r) add(++rr); while(rr>r) del(rr--); while(ll<l) del(ll++); while(ll>l) add(--ll); cout<<now<<endl; } } return 0; } /* 5 4 1 2 3 4 5 2 1 5 2 1 5 2 3 3 2 2 4 */