求助!全WA!!悬一关!!!
查看原帖
求助!全WA!!悬一关!!!
780757
SY_Nightmare楼主2024/5/10 13:01
#include<bits/stdc++.h>
#define int long long 
using namespace std;
const int N=1e5+5,M=571373;
int n,q,m;
int a[N],ans[N<<2],tag[N<<2],mutag[N<<2];
int ls(int p)
{
	return p<<1;
}
int rs(int p)
{
	return p<<1|1;
}
void push_up(int p)
{
	ans[p]=ans[ls(p)]+ans[rs(p)];
	ans[p]%=M;
}
void build(int l,int r,int p)
{
	tag[p]=0;
	mutag[p]=1;
	if(l==r)
	{
		ans[p]=l;
		return;
	}
	int mid=(l+r)>>1;
	build(l,mid,ls(p));
	build(mid+1,r,rs(p));
	push_up(p);
}
void f(int l,int r,int p,int k)
{
	ans[p]=ans[p]+(k*(r-l+1));
	ans[p]%=M; 
	tag[p]=tag[p]+k;
	tag[p]%=M;
}
void muf(int l,int r,int p,int k)
{
	tag[p]*=k;
	tag[p]%=M;
	mutag[p]*=k%M;
	mutag[p]%=M;
	ans[p]*=k;
	ans[p]%=M; 	
}
void push_down(int l,int r,int p)
{
	if(tag[p])
	{
		int mid=(l+r)>>1;
		f(l,mid,ls(p),tag[p]);
		f(mid+1,r,rs(p),tag[p]);
		tag[p]=0;	
	} 
}
void push_mudown(int l,int r,int p)
{
	if(mutag[p]!=1)
	{
		int mid=(l+r)>>1;
		muf(l,mid,ls(p),mutag[p]);
		muf(mid+1,r,rs(p),mutag[p]);
		mutag[p]=1;
	}
}
void update(int n_l,int n_r,int l,int r,int p,int k)
{
	if(n_l<=l&&r<=n_r)
	{
		f(l,r,p,k);
		return;
	}
	push_mudown(l,r,p);
	push_down(l,r,p);
	int mid=(l+r)>>1;
	if(n_l<=mid) update(n_l,n_r,l,mid,ls(p),k);
	if(n_r>mid) update(n_l,n_r,mid+1,r,rs(p),k); 
	push_up(p);
}
void muupdate(int n_l,int n_r,int l,int r,int p,int k)
{
	if(n_l<=l&&r<=n_r)
	{
		muf(l,r,p,k);
		return;
	}
	push_mudown(l,r,p);
	push_down(l,r,p);
	int mid=(l+r)>>1;
	if(n_l<=mid) update(n_l,n_r,l,mid,ls(p),k);
	if(n_r>mid) update(n_l,n_r,mid+1,r,rs(p),k); 
	push_up(p);
}
int chaxun(int n_l,int n_r,int l,int r,int p)
{
	int res=0;
	if(n_l<=l&&r<=n_r) return ans[p];
	push_mudown(l,r,p);
	push_down(l,r,p);
	int mid=(l+r)>>1;
	if(n_l<=mid) res+=chaxun(n_l,n_r,l,mid,ls(p));
	res%=M;
	if(n_r>mid) res+=chaxun(n_l,n_r,mid+1,r,rs(p)); 
	res%=M;
	push_up(p);
	res%=M;
	return res;
}
signed main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n>>q>>m;
	for(int i=1;i<=n;i++) cin>>a[i];
	build(1,n,1);
	while(q--)
	{
		int opt;
		cin>>opt;
		if(opt==1)
		{
			int x,y,k;
			cin>>x>>y>>k;
			muupdate(x,y,1,n,1,k);
		}
		else if(opt==2)
		{
			int x,y,k;
			cin>>x>>y>>k;
			update(x,y,1,n,1,k);
		}
		else
		{
			int x,y;
			cin>>x>>y;
			cout<<chaxun(x,y,1,n,1)%M<<endl;
		}
	}
	return 0;
}
2024/5/10 13:01
加载中...