Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
44900 xit. 数列操作5 C++ 通过 100 152 MS 1844 KB 1266 2022-02-11 09:47:27

Tests(10/10):


#include<bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN=1e5+10; const int MOD=10007; ll n,a[MAXN],pos[MAXN],mul[MAXN],sum[MAXN],block; void Reset(int x) { ll p=pos[x]; for(int i=(p-1)*block+1; i<=min(p*block,n); i++) a[i]=(mul[p]*a[i]+sum[p])%MOD; mul[p]=1,sum[p]=0; } void Update(int l,int r,int c,int opt) { Reset(l); for(int i=l; i<=min(pos[l]*block,(ll)r);i++) { if(opt==0) a[i]=(a[i]+c)%MOD; else a[i]=(a[i]*c)%MOD; } if(pos[l]!=pos[r]) { Reset(r); for(int i=(pos[r]-1)*block+1; i<=r; i++) if(opt==0) a[i]=(a[i]+c)%MOD; else a[i]=(a[i]*c)%MOD; } for(int i=pos[l]+1; i<=pos[r]-1; i++) if(opt==0) sum[i]=(sum[i]+c)%MOD; else { sum[i]=(sum[i]*c)%MOD; mul[i]=(mul[i]*c)%MOD; } } int main() { scanf("%d",&n); block=sqrt(n); for(int i=1; i<=n; i++) { scanf("%d",&a[i]); a[i]%=MOD; pos[i]=(i-1)/block+1; mul[pos[i]]=1; } for(int i=1,opt,l,r,c; i<=n; i++) { scanf("%d%d%d%d",&opt,&l,&r,&c); if(opt==0||opt==1) Update(l,r,c,opt); else printf("%lld\n",(a[r]*mul[pos[r]]+sum[pos[r]])%MOD); } return 0; }


测评信息: