Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
98563 | 呵呵 | Old Driver Tree | C++ | 通过 | 100 | 220 MS | 14344 KB | 1218 | 2023-08-16 10:48:17 |
#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; }