Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
98532 | fkccf | Old Driver Tree | C++ | 运行超时 | 20 | 1000 MS | 12804 KB | 933 | 2023-08-16 09:03:54 |
#include<cstdio> #include<set> struct Rg { int l,r; mutable int v; }; bool operator<(const Rg&x,const Rg&y){return x.l<y.l;} std::set<Rg>s; static std::set<Rg>::iterator split(int p){auto it=s.lower_bound({p,0,0}); if(it!=s.end()&&it->l==p)return it;it--;if(it->r<p)return s.end(); int l=it->l,r=it->r,v=it->v;s.erase(it),s.insert({l,p-1,v});return s.insert({p,r,v}).first;} static void assign(int l,int r,int x){ auto pr=split(r+1),pl=split(l);s.erase(pl,pr);s.insert({l,r,x});} static int query(int l,int r,int x){int w=0; for(auto qr=split(r+1),ql=split(l);ql!=qr;ql++)if(ql->v==x)w+=ql->r-ql->l+1;return w;} const int N=5e5+1;int a[N]; int main(){int n,m;scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)scanf("%d",a+i); int bg=0;for(int i=1;i<=n+1;i++)if(a[i]!=a[i-1]){if(bg)s.insert({bg,i-1,a[i-1]});bg=i;} for(int l,r,c;m--&&scanf("%d%d%d",&l,&r,&c);){printf("%d\n",query(l,r,c));assign(l,r,c);}}