提交时间:2023-08-17 19:01:43

运行 ID: 98866

#include<bits/stdc++.h> using namespace std; const int N=4e5+5; int a[N],s[N],n,m,id[N],len; struct node{ int l,r; }b[N]; bool fl[N]; void modify(int l,int r,int c){ int sid=id[l],eid=id[r]; if(sid==eid){ if(fl[sid]==1) for(int i=b[sid].l;i<=b[sid].r;++i) a[i]=s[sid]; fl[sid]=0; for(int i=l;i<=r;++i) a[i]=c; }else{ if(fl[sid]==1) for(int i=l-1;id[i]==sid;--i) a[i]=s[sid]; for(int i=l;id[i]==sid;++i) a[i]=c; fl[sid]=0; for(int i=sid+1;i<eid;++i) fl[i]=1,s[i]=c; if(fl[eid]==1) for(int i=r+1;id[i]==eid;++i) a[i]=s[eid]; for(int i=r;id[i]==eid;--i) a[i]=c; fl[eid]=0; } } int query(int l,int r,int c){ int sid=id[l],eid=id[r],sum=0; if(sid==eid){ for(int i=l;i<=r;++i) if(a[i]==c) sum++; } else{ if(fl[sid]==1) for(int i=b[sid].l;i<=b[sid].r;++i) a[i]=s[sid]; for(int i=l;id[i]==sid;++i) if(a[i]==c) sum++; for(int i=sid+1;i<eid;++i){ if(fl[i]==1){ if(s[i]==c) sum+=len; }else{ for(int j=b[i].l;j<=b[i].r;++j) if(a[j]==c) sum++; } } if(fl[eid]==1) for(int i=b[eid].l;i<=b[eid].r;++i) a[i]=s[eid]; for(int i=r;id[i]==eid;--i) if(a[i]==c) sum++; } return sum; } int main(){ ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); cin>>n>>m; len=sqrt(n); for(int i=1;i<=n;++i){ cin>>a[i]; id[i]=(i-1)/len+1; if(b[id[i]].l==0) b[id[i]].l=i,b[id[i]].r=i+len-1; } for(int i=1;i<=m;++i){ int l,r,c; cin>>l>>r>>c; cout<<query(l,r,c)<<'\n'; modify(l,r,c); } return 0; }