Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
98714 | CSYZ_LiWenX | Old Driver Tree | C++ | 通过 | 100 | 254 MS | 12780 KB | 1039 | 2023-08-16 13:00:13 |
#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; } }; #define st set<node> :: iterator set<node>s; 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,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; st 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 */