提交时间:2023-08-16 12:04:47
运行 ID: 98590
#include<bits/stdc++.h> using namespace std; #ifdef IAKIOI #define cin fin ifstream cin("in.txt"); #endif #define ll long long struct node { int l,r; mutable ll v; inline bool operator < (const node &a) const { return l < a.l; } }; set<node>s; using st = set<node>::iterator; inline st split(int pos) { st 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; ll v=it->v; s.erase(it),s.insert((node){l,pos-1,v}); return s.insert((node){pos,r,v}).first; } inline void assign(int l,int r,ll x) { st pr=split(r+1),pl=split(l); s.erase(pl,pr),s.insert((node){l,r,x}); } 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(false); cin.tie(nullptr); int n, m; cin >> n >> m; for (int i = 1; i <= n; ++i) { ll a; cin >> a; s.insert((node){i, i, a}); } while (m--) { int l, r; ll c; cin >> l >> r >> c; cout << query(l, r, c) << '\n'; assign(l, r, c); } return 0; }