快疯了,求救0pts,悬关
查看原帖
快疯了,求救0pts,悬关
768325
Herbie_ZHB楼主2024/7/27 09:35
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
long long n,p,m,a[N];
long long sum[N*4],add[N*4][3];
inline long long read(){
	long long x=0;char ch;
	while((ch=getchar())<'0'||ch>'9'){
		ch=getchar();
	}
	x=ch-'0';
	while((ch=getchar())>='0'&&ch<='9'){
		x=x*10+ch-'0';
	}
	return x;
} 
void build(int k,int l,int r){
	add[k][1]=1;
	if(l==r){
		sum[k]=a[l]%p;
		return ;
	}
	int mid=l+r>>1;
	build(k<<1,l,mid);
	build(k<<1|1,mid+1,r);
	sum[k]=(sum[k<<1]+sum[k<<1|1])%p;
}
void Add(int k,int l,int r,int z,long long v){
	if(z==1){
		sum[k]=(sum[k]*v)%p;
	}else if(z==2){
		sum[k]=(sum[k]%p+(r-l+1)*1ll*v%p)%p;
	}
}
void pushdown(int k,int l,int r,int mid){
	if(add[k][1]>1){
		Add(k<<1,l,mid,1,add[k][1]);
		Add(k<<1|1,mid+1,r,1,add[k][1]);
		add[k][1]=1;
	}
	if(add[k][2]>0){
		Add(k<<1,l,mid,2,add[k][2]);
		Add(k<<1|1,mid+1,r,2,add[k][2]);
		add[k][2]=0;
	}
    sum[k]=(sum[k<<1]+sum[k<<1|1])%p;
}
void modify(int k,int l,int r,int x,int y,long long v,int z){
//	if(k==4)cout<<"44444444444"<<' '<<l<<' '<<r<<' '<<x<<' '<<y<<endl;
	if(l>=x&&r<=y){
		if(z==1){
			add[k][1]=(add[k][1]*v)%p;
			add[k][2]=(add[k][2]*v)%p;
		}else if(z==2){
			add[k][2]=(add[k][2]+v)%p;
		}
		Add(k,l,r,z,v);
		return ;
	}
	int mid=l+r>>1;
	pushdown(k,l,r,mid);
	if(x<=mid)modify(k<<1,l,mid,x,y,v,z);
	if(y>mid)modify(k<<1|1,mid+1,r,x,y,v,z);
	sum[k]=(sum[k<<1]+sum[k<<1|1])%p;
}
long long query(int k,int l,int r,int x,int y){
    if(l>=x&&r<=y)return sum[k]%p;
    int mid=l+r>>1;
    long long res=0;
    pushdown(k,l,r,mid);
    if(x<=mid)res+=query(k<<1,l,mid,x,y);
    res%=p;
    if(y>mid)res+=query(k<<1|1,mid+1,r,x,y);
    return res%p;
}
int main(){
//	for(int i=1;i<=4*N-10;i++)add[i][1]=1;
	n=read();p=read();
	for(int i=1;i<=n;i++)a[i]=read();
	build(1,1,n);
	m=read(); 
	while(m--){
		long long k,t,g,c;
		k=read();t=read();g=read();
		if(k==1){
			c=read();
			modify(1,1,n,t,g,c,1);
		}else if(k==2){
			c=read();
			modify(1,1,n,t,g,c,2);
		}else if(k==3){
			printf("%lld\n",query(1,1,n,t,g)%p);
		}
	}
	return 0;
}
2024/7/27 09:35
加载中...