提交时间:2023-08-16 12:05:27
运行 ID: 98597
#include<bits/stdc++.h> #define int long long using namespace std; struct node { int l,r; mutable int v; bool operator <(node x)const{ return l<x.l; } }; set<node>s; auto split(int pos){ auto it=s.lower_bound((node){pos,0,0}); if(it!=s.end() && it->l==pos) return it; it--; if(it->r<pos) return s.end(); int l=it->l,r=it->r,v=it->v; s.erase(it),s.insert((node){l,pos-1,v}); return s.insert((node){pos,r,v}).first; } int ask(int l,int r,int x) { int ans=0; auto qr=split(r+1),ql=split(l),t=ql; for(;ql!=qr;ql++) if((*ql).v==x) ans+=(*ql).r-(*ql).l+1; ql=t; s.erase(ql,qr),s.insert((node){l,r,x}); return ans; } int n,m; signed main(){ // freopen("1.in","r",stdin); // freopen("_.out","w",stdout); ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>m; for(int i=1;i<=n;i++){ int x;cin>>x; s.insert((node){i,i,x}); } while(m--){ int l,r,c;cin>>l>>r>>c; cout<<ask(l,r,c)<<'\n'; } } /* 4 4 1 2 2 4 1 3 1 1 4 4 1 2 2 1 4 2 */