求助线段树2,WA3个点
查看原帖
求助线段树2,WA3个点
315229
ZJAJOIer楼主2021/7/28 20:21

RT,以关注作为回报

#include<bits/stdc++.h>
#define ll long long
#define MOD 571373
using namespace std;
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+(ch^48);ch=getchar();}
	return x*f;
}
const int N=1e5+5;
int n,m,mod,op,x,y,k,a[N];
ll sum[N<<2],mul_lazy[N<<2],add_lazy[N<<2];
void push_up(int k)
{
	sum[k]=(sum[k<<1]+sum[k<<1|1])%MOD;
	return;
}
void build(int k,int l,int r)
{
	mul_lazy[k]=1;
	add_lazy[k]=0;
	if(l==r)
	{
		sum[k]=a[l]%MOD;
		return;
	}
	int m=l+r>>1;
	build(k<<1,l,m);
	build(k<<1|1,m+1,r);
	push_up(k);
	return;
}
void update_lazy(int k,int l,int r,int mul,int add)
{
	sum[k]=(sum[k]*mul+add*(r-l+1))%MOD;
	mul_lazy[k]*=mul;add_lazy[k]*=mul;
	add_lazy[k]+=add;
	mul_lazy[k]%=MOD;
	add_lazy[k]%=MOD;
	return;
}
void pushdown(int k,int l,int r)
{
	if(mul_lazy[k]==1&&add_lazy[k]==0)
		return;
	if(l==r)
	{
		mul_lazy[k]=1;
		add_lazy[k]=0;
		return;		
	}
	int m=l+r>>1;
	update_lazy(k<<1,l,m,mul_lazy[k],add_lazy[k]);
	update_lazy(k<<1|1,m+1,r,mul_lazy[k],add_lazy[k]);
	mul_lazy[k]=1;
	add_lazy[k]=0;
	return;
}
void update(int k,int l,int r,int x,int y,int mul,int add)
{
	if(x<=l&&r<=y)
	{
		update_lazy(k,l,r,mul,add);
		return;
	}
	pushdown(k,l,r);
	int m=l+r>>1;
	if(x<=m)
		update(k<<1,l,m,x,y,mul,add);
	if(y>m)
		update(k<<1|1,m+1,r,x,y,mul,add);
	push_up(k);
	return;
}
ll query(int k,int l,int r,int x,int y)
{
	if(x<=l&&r<=y)
		return sum[k]%=MOD;
	pushdown(k,l,r);
	int m=l+r>>1;
	ll cnt=0;
	if(x<=m)
		cnt+=query(k<<1,l,m,x,y);
	if(y>m)
		cnt+=query(k<<1|1,m+1,r,x,y);
	return cnt%MOD;
}
signed main()
{
    n=read(),m=read(),mod=read();
    for(int i=1;i<=n;++i)
    	a[i]=read();
    build(1,1,n);
    while(m--)
    {
    	op=read(),x=read(),y=read();
    	if(op==1)
    	{
    		k=read();
			update(1,1,n,x,y,k,0);
		}
    	else if(op==2)
    	{
    		k=read();
			update(1,1,n,x,y,1,k);
		}
    	else
    		printf("%lld\n",query(1,1,n,x,y)%MOD);
	}
	return 0;
}
2021/7/28 20:21
加载中...