Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
98774 CSYZ_HeYC Old Driver Tree C++ 解答错误 0 295 MS 2608 KB 1910 2023-08-16 14:10:22

Tests(0/4):


#include<bits/stdc++.h> using namespace std; #define ll long long template<typename T>inline void read(T &ret){ ret=0;T fh=1;char ch=getchar(); while(!isdigit(ch)){if(ch=='-')fh=-1;ch=getchar();} while(isdigit(ch))ret=(ret<<1)+(ret<<3)+(ch^48),ch=getchar(); ret*=fh; } template<typename T>inline void write(T ret,bool flag){ if(ret<0)putchar('-'),ret*=-1; static char out[25];int top=0; do{out[++top]=(ret%10)^48,ret/=10;}while(ret); for(;top;--top)putchar(out[top]); putchar(flag?' ':'\n'); } const int N=2e5+5,M=500; const ll inf=0x7f7f7f7f7f7f7f7f; int n,m,kc,id[N],L[M],R[M]; ll a[N],tag[M]; inline int query(int l,int r,ll c){ int ans=0; for(int i=l;i<=min(r,R[id[l]]);++i) ans+=(a[i]==c); if(id[l]!=id[r]) for(int i=L[id[r]];i<=r;++i) ans+=(a[i]==c); for(int i=id[l]+1;i<id[r];++i){ if(tag[i]==inf) for(int j=L[i];j<=R[i];++j) ans+=(a[j]==c); else ans+=(tag[i]==c?R[i]-L[i]+1:0); } return ans; } inline void change(int l,int r,ll c){ if(id[l]==id[r]){ for(int i=l;i<=r;++i)a[i]=c; if(tag[id[l]]!=inf){ for(int i=L[id[l]];i<l;++i)a[i]=tag[id[i]]; for(int i=r+1;i<=R[id[r]];++i)a[i]=tag[id[i]]; tag[id[l]]=inf; } return; } if(tag[id[l]]!=inf)for(int i=L[id[l]];i<l;++i)a[i]=tag[id[l]]; for(int i=l;i<=R[id[l]];++i)a[i]=c;tag[id[l]]=inf; if(tag[id[r]]!=inf)for(int i=r+1;i<=R[id[r]];++i)a[i]=tag[id[r]]; for(int i=L[id[r]];i<=r;++i)a[i]=c;tag[id[r]]=inf; for(int i=id[l]+1;i<id[r];++i)tag[i]=c; } int main(){ // freopen("ODT.in","r",stdin); // freopen("ODT.out","w",stdout); int l,r;ll c; read(n);read(m);kc=sqrt(n); memset(L,0x7f,sizeof(L)); memset(tag,0x7f,sizeof(tag)); for(int i=1;i<=n;++i){ read(a[i]); id[i]=(i-1)/kc+1; R[id[i]]=i; L[id[i]]=min(i,L[id[i]]); } while(m--){ read(l);read(r);read(c); write(query(l,r,c),0); change(l,r,c); } return 0; }


测评信息: