全RE求助
查看原帖
全RE求助
104380
garbage2楼主2020/11/7 10:01

RT,全RE,不知错因

#include<bits/stdc++.h>
using namespace std;
struct tree{
	int l,r;
	int v;
	int f1,f2;
}a[4*100000+5];
int p;
int x,y;
long long ans;
void init(int l,int r,int s)
{
	a[s].l=l,a[s].r=r;
	a[s].f1=0;
	a[s].f2=1;
	if(l==r){
		cin>>a[s].v;
		return ;
	}
	int m=(l+r)/2;
	init(l,m,2*s);
	init(m+1,r,2*s+1);
	a[s].v=a[2*s].v+a[2*s+1].v;
	a[s].v%=p;
}
void down(int s)
{
	int fa=a[s].f1,fm=a[s].f2;
	a[s].f1=0;
	a[s].f2=1;
	////
	a[2*s].v=a[2*s].v*fm+fa*(a[2*s].r-a[2*s].l+1);
	a[2*s].v%=p;
	a[2*s+1].v=a[2*s+1].v*fm+fa*(a[2*s+1].r-a[2*s+1].l+1);
	a[2*s+1].v%=p;
	////
	a[2*s].f2=(a[2*s].f2*fm)%p;
	a[2*s+1].f2=(a[2*s+1].f2*fm)%p;
	a[2*s].f1=(a[2*s].f1*fm+fa)%p;
	a[2*s+1].f1=(a[2*s+1].f1*fm+fa)%p;
}
void jia(int s,int v)
{
	int l=a[s].l,r=a[s].r;
	if(x<=l&&r<=y){
		a[s].v+=v*(r-l+1);
		a[s].v%=p;
		a[s].f1+=v;
		a[s].f1%=p;
	}
	down(s);
	int m=(l+r)/2;
	if(x<=m)
		jia(2*s,v);
	if(y>m)
		jia(2*s+1,v);
	a[s].v=(a[2*s].v+a[2*s+1].v)%p;
}
void chen(int s,int v)
{
	int l=a[s].l,r=a[s].r;
	if(x<=l&&r<=y){
		a[s].v+=(a[s].v*v)%p;
		a[s].f1=(a[s].f1*v)%p;
		a[s].f2=(a[s].f2*v)%p;
	}
	down(s);
	int m=(l+r)/2;
	if(x<=m)
		chen(2*s,v);
	if(y>m)
		chen(2*s+1,v);
	a[s].v=(a[2*s].v+a[2*s+1].v)%p;
}
void he(int s)
{
	int l=a[s].l,r=a[s].r;
	if(x<=l&&r<=y){
		ans+=a[s].v;
		ans%=p;
	}
	int m=(l+r)/2;
	if(x<=m)
		he(2*s);
	if(y>m)
		he(2*s+1);
}
int main()
{
	int n,m;
	cin>>n>>m>>p;
	init(1,n,1);
	int i;
	for(i=1;i<=m;i++){
		int op,v;
		cin>>op>>x>>y;
		if(op==1){
			cin>>v;
			chen(1,v);
		}
		if(op==2){
			cin>>v;
			jia(1,v);
		}
		if(op==3){
			he(1);
			cout<<ans<<endl;
		}
	}
	return 0;
}
2020/11/7 10:01
加载中...