Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
98620 | CSYZLinGS | Old Driver Tree | C++ | 通过 | 100 | 217 MS | 12756 KB | 1107 | 2023-08-16 12:08:56 |
#include<bits/stdc++.h> using namespace std; #define N 200001 struct node { int l,r; mutable int v; }; int n; bool operator <(node x,node y){ return x.l<y.l; } set<node>s; #define st set<node>::iterator inline st split(int pos) { if(pos==n+1)return s.end(); st it=s.lower_bound((node){pos,0,0}); if(it!=s.end() && it->l==pos) return it; it--; 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; } inline void assign(int l,int r,int 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,int 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 m; int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;++i){ int x;scanf("%d",&x);s.insert((node){i,i,x}); } while(m--){ int l,r,c; scanf("%d%d%d",&l,&r,&c); printf("%d\n",query(l,r,c)); assign(l,r,c); } return 0; }