报错提示:测评记录
编译信息显示Nothing is compiled: OUTPUT exceeds.
经过我的反复测试(二分),确定是数组过大导致,但是占用空间35000098/1024/1024=11.4MB左右,没有超过限制,为什么啊(本地可以正常编译)
贴上报错代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN=500009;
int mod;
struct node{
int sum=0,muln=1,addn=0;
};
node tr[MAXN];
void push_down(int pos,int l,int r){
if(tr[pos].muln!=1||tr[pos].addn){
int mid=(l+r)>>1,ls=pos<<1,rs=pos<<1|1;
tr[ls].sum=(tr[ls].sum*tr[pos].muln+tr[pos].addn*(mid-l+1))%mod;
tr[rs].sum=(tr[rs].sum*tr[pos].muln+tr[pos].addn*(r-mid))%mod;
tr[ls].addn=(tr[pos].muln*tr[ls].addn+tr[pos].addn)%mod,tr[ls].muln=(tr[ls].muln*tr[pos].muln)%mod;
tr[rs].addn=(tr[pos].muln*tr[rs].addn+tr[pos].addn)%mod,tr[rs].muln=(tr[rs].muln*tr[pos].muln)%mod;
tr[pos].addn=0,tr[pos].muln=1;
}
}
void add(int pos,int l,int r,int x,int y,int val){//当前l,r 目标 x,y
if(x<=l&&r<=y){
//printf("tar:[%d,%d] now:[%d,%d] all in\n",x,y,l,r);
tr[pos].addn=(tr[pos].addn+val)%mod;
tr[pos].sum=(tr[pos].sum+(r-l+1)*val)%mod;
return;
}
push_down(pos,l,r);
int mid=(l+r)>>1;
if(x<=mid)add(pos<<1,l,mid,x,y,val);
if(y>mid)add(pos<<1|1,mid+1,r,x,y,val);
tr[pos].sum=(tr[pos<<1].sum+tr[pos<<1|1].sum)%mod;
}
void mul(int pos,int l,int r,int x,int y,int val){
if(x<=l&&r<=y){
tr[pos].sum=(tr[pos].sum*val)%mod;
tr[pos].addn=(tr[pos].addn*val)%mod,tr[pos].muln=(tr[pos].muln*val)%mod;
return;
}
push_down(pos,l,r);
int mid=(l+r)>>1;
if(x<=mid)mul(pos<<1,l,mid,x,y,val);
if(y>mid)mul(pos<<1|1,mid+1,r,x,y,val);
tr[pos].sum=(tr[pos<<1].sum+tr[pos<<1|1].sum)%mod;
}
int query(int pos,int l,int r,int x,int y){
if(x<=l&&r<=y){
return tr[pos].sum%mod;
}
push_down(pos,l,r);
int mid=(l+r)>>1,ans=0;
if(x<=mid)ans=(ans+query(pos<<1,l,mid,x,y))%mod;
if(y>mid)ans=(ans+query(pos<<1|1,mid+1,r,x,y))%mod;
return ans;
}
signed main(){
int op,x,y,k,n,m;
ios::sync_with_stdio(0);
/*cin.tie(0);
cout.tie(0);*/
cin>>n>>m>>mod;
for(int i=1;i<=n;i++){
cin>>x;
add(1,1,n,i,i,x);
}
for(int i=1;i<=m;i++){
cin>>op;
if(op==2){
cin>>x>>y>>k;
add(1,1,n,x,y,k);
}
if(op==3){
cin>>x>>y;
cout<<query(1,1,n,x,y)%mod<<'\n';
}
if(op==1){
cin>>x>>y>>k;
mul(1,1,n,x,y,k);
}
}
return 0;
}