样例过了,求调。
查看原帖
样例过了,求调。
334935
youyi2008楼主2022/9/14 20:55

代码如下:

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int a[maxn];
struct node
{
	int l,r;
	int v,lz,lv;
}tr[maxn<<2];
int n,m,p;
void pushup(int u)
{
	tr[u].v=tr[u<<1].v+tr[u<<1|1].v;
	return;
}
void build(int u,int l,int r)
{
	tr[u].l=l,tr[u].r=r;
	if(l==r)
	{
		tr[u].v=a[l];
		return;
	}
	int mid=l+r>>1;
	build(u<<1,l,mid),build(u<<1|1,mid+1,r);
	pushup(u);
}
void pushdown2(int u)
{
	if(tr[u].l==tr[u].r)
	{
		tr[u].lv=1;
		return;
	}
	tr[u<<1].lv*=tr[u].lv;
	tr[u<<1|1].lv*=tr[u].lv;
	tr[u<<1].v*=tr[u].lv;
	tr[u<<1|1].v*=tr[u].lv;
	tr[u].lv=1;	
}
void pushdown1(int u)
{
	if(tr[u].l==tr[u].r)
	{
		tr[u].lz=0;
		return;
	}
	tr[u<<1].lz+=tr[u].lz;
	tr[u<<1|1].lz+=tr[u].lz;
	tr[u<<1].v+=tr[u].lz*(tr[u<<1].r-tr[u<<1].l+1);
	tr[u<<1|1].v+=tr[u].lz*(tr[u<<1|1].r-tr[u<<1|1].l+1);
	tr[u].lz=0; 
}
int query(int u,int l,int r)
{
	if(tr[u].lv)
		pushdown2(u);
	if(tr[u].lz)
		pushdown1(u);
	if(tr[u].l>=l&&tr[u].r<=r)
		return tr[u].v%p;
	int mid=tr[u].l+tr[u].r>>1;
	int res=0;
	if(l<=mid)
		res+=query(u<<1,l,r)%p;
	if(mid<r)
		res+=query(u<<1|1,l,r)%p;
	return res%p;
}
//乘法 
void add1(int u,int l,int r,int v)
{
	if(tr[u].lv)
		pushdown2(u);
	if(tr[u].lz)
		pushdown1(u);
	if(tr[u].l>=l&&tr[u].r<=r)
	{
		tr[u].v*=v;
		tr[u].lv*=v;
		return;
	}
	int mid=tr[u].l+tr[u].r>>1;
	if(l<=mid)
		add1(u<<1,l,r,v);
	if(mid<r)
		add1(u<<1|1,l,r,v);
	pushup(u);
}
void add2(int u,int l,int r,int v)
{
	if(tr[u].lv)
		pushdown2(u);
	if(tr[u].lz)
		pushdown1(u);
	if(tr[u].l>=l&&tr[u].r<=r)
	{
		tr[u].v+=v*(tr[u].r-tr[u].l+1);
		tr[u].lz+=v;
		return;
	}
	int mid=tr[u].l+tr[u].r>>1;
	if(l<=mid)
		add2(u<<1,l,r,v);
	if(mid<r)
		add2(u<<1|1,l,r,v);
	pushup(u);
}
int main()
{
	cin>>n>>m>>p;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	build(1,1,n);
	for(int i=1;i<=m;i++)
	{
		int l,r,k,f;
		cin>>f>>l>>r;
		if(f==1)
		{
			cin>>k;
			add1(1,l,r,k);
		}
		if(f==2)
		{
			cin>>k;
			add2(1,l,r,k);
		}
		if(f==3)
			cout<<query(1,l,r)%p<<endl;
	}
 } 

样例过了,全WA

2022/9/14 20:55
加载中...