Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
98574 | wangjiajian | Old Driver Tree | C++ | 通过 | 100 | 233 MS | 14316 KB | 1211 | 2023-08-16 11:23:00 |
#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 ll query(int l,int r,ll x) { ll ans=0; st qr=split(r+1),ql=split(l); for(;ql!=qr;ql++) if((*ql).v==x) ans=ans+(*ql).r-(*ql).l+1; return ans; } int main() { scanf("%d%d", &n, &m); for(int i=1; i<=n; i++) { scanf("%lld", a+i); s.insert(node(i,i,a[i])); } for(int i=1,l,r; i<=m; i++) { scanf("%d%d%lld", &l, &r, &c); printf("%lld\n", query(l,r,c)); val(l,r,c); } return 0; }