Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
98832 CSYZ_HeYC Karry5307 C++ 运行超时 25 1000 MS 5148 KB 2570 2023-08-16 16:28:00

Tests(6/9):


#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=1e5+5; const ll inf=0x7f7f7f7f; int n,m,kc,id[N],L[N],R[N],a[N],b[N<<1],tag[N],len,vis[N<<1]; struct qus{int op,l,r,x;}q[N]; inline int query(int l,int r,int x){ int ans=0; if(tag[id[l]]!=inf){ ans+=(vis[tag[id[l]]]!=x); vis[tag[id[l]]]=x; } else for(int i=l;i<=min(r,R[id[l]]);++i) ans+=(vis[a[i]]!=x),vis[a[i]]=x; if(id[l]!=id[r]){ if(tag[id[r]]!=inf){ ans+=(vis[tag[id[r]]]!=x); vis[tag[id[r]]]=x; } else for(int i=L[id[r]];i<=r;++i) ans+=(vis[a[i]]!=x),vis[a[i]]=x; } for(int i=id[l]+1;i<id[r];++i){ if(tag[i]!=inf){ ans+=(vis[tag[i]]!=x); vis[tag[i]]=x; } else for(int j=L[i];j<=R[i];++j) ans+=(vis[a[j]]!=x),vis[a[j]]=x; } return ans; } inline void change(int l,int r,int x){ if(id[l]==id[r]){ for(int i=l;i<=r;++i)a[i]=x; if(tag[id[l]]==inf)return; 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[i]]; for(int i=l;i<=R[id[l]];++i)a[i]=x;tag[id[l]]=inf; if(tag[id[r]]!=inf)for(int i=r+1;i<=R[id[r]];++i)a[i]=tag[id[i]]; for(int i=L[id[r]];i<=r;++i)a[i]=x;tag[id[r]]=inf; for(int i=id[l]+1;i<id[r];++i)tag[i]=x; } int main(){ // freopen("karry5307.in","r",stdin); // freopen("karry5307.out","w",stdout); 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]); b[++len]=a[i]; id[i]=(i-1)/kc+1; L[id[i]]=min(i,L[id[i]]); R[id[i]]=max(i,R[id[i]]); } for(int i=1;i<=m;++i){ read(q[i].op); read(q[i].l); read(q[i].r); if(q[i].op&1){ read(q[i].x); b[++len]=q[i].x; } } sort(b+1,b+len+1); len=unique(b+1,b+len+1)-b-1; for(int i=1;i<=n;++i)a[i]=lower_bound(b+1,b+len+1,a[i])-b; for(int i=1;i<=m;++i)if(q[i].op&1)q[i].x=lower_bound(b+1,b+len+1,q[i].x)-b; for(int i=1;i<=m;++i){ if(q[i].op&1)change(q[i].l,q[i].r,q[i].x); else write(query(q[i].l,q[i].r,i),0); } return 0; }


测评信息: