幽默报错
查看原帖
幽默报错
890257
CarlosProvo楼主2024/7/29 12:06

报错内容: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;
}
2024/7/29 12:06
加载中...