提交时间:2023-08-16 10:48:17
运行 ID: 98563
#include<bits/stdc++.h> #define st set<node>::iterator using namespace std; typedef long long ll; const int maxx=2e5+20; struct node { int l,r; mutable ll v; node(int L, int R=-1, ll V=0):l(L), r(R), v(V) {} bool operator<(const node& o) const { return l < o.l; } }; set<node> s; int n, m; ll a[maxx],c; st split(int pos) { st it=s.lower_bound(node(pos)); if (it!=s.end() && it->l==pos) return it; it--; int L=it->l,R=it->r; ll V=it->v; s.erase(it); s.insert(node(L, pos-1, V)); return s.insert(node(pos, R, V)).first; } void val(int l,int r,ll val) { st itr=split(r+1),itl=split(l); s.erase(itl, itr); s.insert(node(l, r, val)); } inline int query(int l,int r,ll x) { int ans=0; st qr=split(r+1),ql=split(l); for(;ql!=qr;ql++) if((*ql).v==x) ans+=(*ql).r-(*ql).l+1; return ans; } int main() { ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); cin>>n>>m; for(int i=1; i<=n; i++) { cin>>a[i]; s.insert(node(i,i,a[i])); } for(int i=1,l,r; i<=m; i++) { cin>>l>>r>>c; cout<<query(l,r,c)<<'\n'; val(l,r,c); } return 0; }