Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
98604 | CSYZ_GaoSL | Old Driver Tree | C++ | 编译错误 | 0 | 0 MS | 0 KB | 1097 | 2023-08-16 12:08:04 |
#include<bits/stdc++.h> using namespace std; struct ODT{ int l,r; mutable int v; inline bool operator<(const ODT&x)const{ return l<x.l; } }; set<ODT>odt; inline auto split(int x){ auto it=odt.lower_bound({x,0,0}); if(it!=odt.end()&&it->l==x)return it; --it; if(it->r<x)return odt.end(); int l=it->l,r=it->r,v=it->v; odt.erase(it),odt.insert({l,x-1,v}); return odt.insert({x,r,v}).first; } inline void ass(int l,int r,int v){ auto itr=split(r+1),itl=split(l); odt.erase(itl,itr),odt.insert({l,r,v}); } inline int qry(int l,int r,int x){ int ans=0; auto itr=split(r+1),itl=split(l); for(;itl!=itr;++itl) if((*itl).v==x) ans+=(*itl).r-(*itl).l+1; return ans; } int main(){ int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ int x; scanf("%d",&x); odt.insert({i,i,x}); } for(int i=1;i<=m;i++){ int l,r,x; scanf("%d%d%d",&l,&r,&x); printf("%d\n",qry(l,r,x)); ass(l,r,x); } return 0; }