报错内容:Nothing is compiled: OUTPUT exceeds.
#include<bits/stdc++.h>
#define int int
#define ls p<<1
#define rs p<<1|1
using namespace std;
const int N=2e6+5,mod=1e9+7;
struct node
{
int unlock=0,lock=0,len=0,add=0,mul=1,bl=0;
}tree[N*4];
int n,m;
int a[N];
vector<pair<int,int>> t[N];
void push_up(int p)
{
if(!tree[p].bl)
{
tree[p].unlock=(tree[ls].unlock+tree[rs].unlock)%mod;
tree[p].lock=(tree[ls].lock+tree[rs].lock)%mod;
tree[p].len=(tree[ls].len+tree[rs].len)%mod;
}
}
void build(int p,int l,int r)
{
tree[p].mul=1;
if(l==r)
{
cin>>a[l];
tree[p].unlock=a[l];
tree[p].len=1;
return ;
}
int mid=(l+r)>>1;
build(ls,l,mid);
build(rs,mid+1,r);
push_up(p);
}
void push_down(int p)
{
if(!tree[ls].bl)
{
tree[ls].unlock=(tree[ls].unlock*tree[p].mul+tree[p].add*tree[ls].len%mod)%mod;
tree[ls].add=(tree[ls].add*tree[p].mul%mod+tree[p].add)%mod;
tree[ls].mul=(tree[ls].mul*tree[p].mul)%mod;
}
if(!tree[rs].bl)
{
tree[rs].unlock=(tree[rs].unlock*tree[p].mul+tree[p].add*tree[rs].len%mod)%mod;
tree[rs].add=(tree[rs].add*tree[p].mul%mod+tree[p].add)%mod;
tree[rs].mul=(tree[rs].mul*tree[p].mul)%mod;
}
tree[p].add=0;
tree[p].mul=1;
}
void modify(int x,int y,int p,int l,int r,int k,int op)
{
if(tree[p].bl)return;
if(x<=l&&r<=y)
{
if(op==1)
{
tree[p].unlock=(tree[p].unlock+tree[p].len*k%mod)%mod;
tree[p].add=(tree[p].add+k)%mod;
}
if(op==2)
{
tree[p].unlock=tree[p].unlock*k%mod;
tree[p].add=tree[p].add*k%mod;
tree[p].mul=tree[p].mul*k%mod;
}
return;
}
int mid=(l+r)>>1;
push_down(p);
if(x<=mid)modify(x,y,ls,l,mid,k,op);
if(y>mid)modify(x,y,rs,mid+1,r,k,op);
push_up(p);
}
void lock_on(int x,int y,int p,int l,int r)
{
if(x<=l&&r<=y)
{
if(l!=r)push_down(p);
if(tree[p].bl==0)
{
tree[p].lock=(tree[p].lock+tree[p].unlock)%mod;
tree[p].unlock=0;
tree[p].len=0;
}
++tree[p].bl;
return ;
}
push_down(p);
int mid=(l+r)>>1;
if(x<=mid)lock_on(x,y,ls,l,mid);
if(y>mid)lock_on(x,y,rs,mid+1,r);
push_up(p);
}
void unlock(int x,int y,int p,int l,int r)
{
if(x<=l&&r<=y)
{
--tree[p].bl;
if(tree[p].bl==0)
{
if(l==r)swap(tree[p].unlock,tree[p].lock),tree[p].len=1;
else push_up(p);
}
return ;
}
push_down(p);
int mid=(l+r)>>1;
if(x<=mid)unlock(x,y,ls,l,mid);
if(y>mid)unlock(x,y,rs,mid+1,r);
push_up(p);
}
int query(int x,int y,int p,int l,int r)
{
if(x<=l&&r<=y)
return (tree[p].unlock+tree[p].lock)%mod;
int mid=(l+r)>>1;
int res=0;
push_down(p);
if(x<=mid)res+=query(x,y,ls,l,mid);
if(y>mid)res+=query(x,y,rs,mid+1,r);
return res%mod;
}
signed main()
{
cin>>n>>m;
build(1,1,n);
for(int i=1;i<=m;i++)
{
int op,l,r;
int x;
cin>>op>>l>>r;
if(op<=3)cin>>x;
if(op<=2)modify(l,r,1,1,n,x,op);
if(op==3)
{
lock_on(l,r,1,1,n);
t[i+x].push_back({l,r});
}
if(op==4)cout<<query(l,r,1,1,n)<<endl;
for(auto j:t[i])unlock(j.first,j.second,1,1,n);
}
return 0;
}