提交时间:2023-08-16 10:19:27
运行 ID: 98559
#include<bits/stdc++.h> using namespace std; int n,m; long long a[200005],c; template<typename T>struct node{ int l,r; mutable T v; bool operator<(node a)const{ return l<a.l; } }; template<typename T>struct chtholly_tree{ set<node<T>>tr; void build(int n,T a[]){ for(int i=1;i<=n;i++)tr.insert(node<T>{i,i,a[i]}); } typename set<node<T>>::iterator split(int pos){ typename set<node<T>>::iterator it=tr.lower_bound(node<T>{pos,0,0}); if(it!=tr.end()&&(*it).l==pos)return it; it--; if((*it).r<pos)return tr.end(); int l=(*it).l,r=(*it).r; T v=(*it).v; return tr.erase(it),tr.insert(node<T>{l,pos-1,v}),tr.insert(node<T>{pos,r,v}).first; } void assign(int l,int r,T x){ typename set<node<T>>::iterator itr=split(r+1),itl=split(l); tr.erase(itl,itr),tr.insert(node<T>{l,r,x}); } int query(int l,int r,T x,int ans=0){ typename set<node<T>>::iterator itr=split(r+1),itl=split(l); for(typename set<node<T>>::iterator it=itl;it!=itr;it++)if((*it).v==x)ans+=(*it).r-(*it).l+1; return ans; } }; chtholly_tree<long long>t; int main(){ cin>>n>>m; for(int i=1;i<=n;i++)cin>>a[i]; t.build(n,a); for(int i=1,l,r;i<=m;i++)cin>>l>>r>>c,cout<<t.query(l,r,c)<<'\n',t.assign(l,r,c); return 0; }