Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
34645 daimo 【S】T3 C++ 运行出错 0 16 MS 9232 KB 3137 2024-11-12 14:26:24

Tests(0/22):


#include<bits/stdc++.h> #define int long long using namespace std; const int mod=1e9+7; void textread(){ freopen("test.in","r",stdin); freopen("test.out","w",stdout); } void textread2(){ freopen("sequence.in","r",stdin); freopen("sequence.out","w",stdout); } int num[100010]; int opt,l,r,p,pos,v; struct tree{ int num1,num2; int l, r; }segt[400010]; void upd(int p){ segt[p].num1=(segt[p<<1].num1+segt[p<<1|1].num1)%mod; segt[p].num2=(segt[p<<1].num2+segt[p<<1|1].num2)%mod; return; } void build(int p,int l,int r){ segt[p].l=l,segt[p].r=r; if(l==r){ segt[p].num1=num[l]%mod; segt[p].num2=(num[l]*num[l])%mod; return; } build(p<<1,l,l+r>>1); build(p<<1|1,(l+r>>1)+1,r); upd(p); return; } int ask1(int p,int l,int r){ if(l<=segt[p].l&&segt[p].r<=r){ return segt[p].num1%mod; } int mid=l+r<<1; int res=0; if(l<=mid)res=(res+ask1(p<<1,l,r)+mod)%mod; if(r>mid)res=(res+ask1(p<<1|1,l,r)+mod)%mod; return res; } int ask2(int p,int l,int r){ if(l<=segt[p].l&&segt[p].r<=r){ return segt[p].num2%mod; } int mid=l+r<<1; int res=0; if(l<=mid)res=(res+ask2(p<<1,l,r)+mod)%mod; if(r>mid)res=(res+ask2(p<<1|1,l,r)+mod)%mod; return res; } void change1(int p,int l,int v){ if(segt[p].l==segt[p].r){ segt[p].num1=v%mod; segt[p].num2=(v*v)%mod; return; } int mid=l+r>>1; if(l<=mid)change1(p<<1,l,v); else change1(p<<1|1,l,v); upd(p); return; } signed main(){ ios::sync_with_stdio(0); //textread2(); int n,m; cin>>n>>m; if(n<=100&&m<=100){ for(int i=1;i<=n;i++){ cin>>num[i]; } for(int i=1;i<=m;i++){ cin>>opt; if(opt==1){ cin>>l>>r; int sum=0; for(int i=l;i<=r;i++){ sum=(sum+num[i]+mod)%mod; } cout<<sum<<endl; }else if(opt==2){ cin>>l>>r; int sum=0; for(int i=l;i<=r;i++){ sum=(sum+num[i]*num[i])%mod; } cout<<sum<<endl; }else if(opt==3){ cin>>l>>r>>p; for(int i=l;i<=r;i++){ num[i]/=p; } }else{ cin>>pos>>v; num[pos]=v; } } return 0; } for(int i=1;i<=n;i++)cin>>num[i]; build(1,1,n); for(int i=1;i<=m;i++){ cin>>opt; if(opt==1){ cin>>l>>r; cout<<ask1(1,l,r)%mod<<endl; }else if(opt==2){ cin>>l>>r; cout<<ask2(1,l,r)%mod<<endl; }else if(opt==3){ cin>>l>>r>>p; for(int i=l;i<=r;i++){ num[i]/=p; } build(1,1,n); }else{ cin>>pos>>v; change1(1,pos,v); } } return 0; }


测评信息: