提交时间:2023-08-16 12:08:04

运行 ID: 98604

#include<bits/stdc++.h> using namespace std; struct ODT{ int l,r; mutable int v; inline bool operator<(const ODT&x)const{ return l<x.l; } }; set<ODT>odt; inline auto split(int x){ auto it=odt.lower_bound({x,0,0}); if(it!=odt.end()&&it->l==x)return it; --it; if(it->r<x)return odt.end(); int l=it->l,r=it->r,v=it->v; odt.erase(it),odt.insert({l,x-1,v}); return odt.insert({x,r,v}).first; } inline void ass(int l,int r,int v){ auto itr=split(r+1),itl=split(l); odt.erase(itl,itr),odt.insert({l,r,v}); } inline int qry(int l,int r,int x){ int ans=0; auto itr=split(r+1),itl=split(l); for(;itl!=itr;++itl) if((*itl).v==x) ans+=(*itl).r-(*itl).l+1; return ans; } int main(){ int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ int x; scanf("%d",&x); odt.insert({i,i,x}); } for(int i=1;i<=m;i++){ int l,r,x; scanf("%d%d%d",&l,&r,&x); printf("%d\n",qry(l,r,x)); ass(l,r,x); } return 0; }