Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
98555 | Ender | Old Driver Tree | C++ | 运行超时 | 40 | 1000 MS | 12748 KB | 1123 | 2023-08-16 09:58:17 |
#include <iostream> #include <set> #include <algorithm> #define ll long long #define st set<node>::iterator using namespace std; const int N = 200010; struct node { int l,r; mutable ll v; //对节点排序 bool operator<(const node &a) const { return l<a.l; } }; set<node>s; inline st split(int pos) { st it = lower_bound(s.begin(),s.end(),(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; } 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) { ll 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() { int n,m,i; ll x; cin>>n>>m; for(i = 1;i <= n;i++) { cin>>x; s.insert((node){i,i,x}); } while(m--) { int l,r; ll c; cin>>l>>r>>c; cout<<query(l,r,c)<<endl; assign(l,r,c); } return 0; }