wa了,哎
  • 板块灌水区
  • 楼主bianyanze
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/10/2 21:56
  • 上次更新2024/10/3 09:03:10
查看原帖
wa了,哎
1007677
bianyanze楼主2024/10/2 21:56

#include<bits/stdc++.h> using namespace std; const int N=1e5+10; struct segtree{ int l,r; long long sum; int add,mul; }a[N<<2]; int data[N]; int n,m,p; void pushup(int u){ a[u].sum=(a[u<<1].sum+a[u<<1|1].sum)%p; } void build(int u,int l,int r){ a[u].l=l,a[u].r=r; a[u].add=0,a[u].mul=1; if(l==r){ a[u].sum=data[l]; return; } int mid=l+r>>1; build(u<<1,l,mid); build(u<<1|1,mid+1,r); pushup(u); } void pushdown(int u){ a[u<<1].sum=(long long)(a[u].mula[u<<1].sum+(a[u<<1].r-a[u<<1].l+1)a[u].add%p)%p; a[u<<1].sum=(long long)(a[u].mula[u<<1|1].sum+(a[u<<1|1].r-a[u<<1|1].l+1)a[u].add%p)%p; a[u<<1].mul=(long long)(a[u<<1].mula[u].mul)%p; a[u<<1|1].mul=(long long)(a[u<<1|1].mula[u].mul)%p; a[u<<1].add=(long long)(a[u].mula[u<<1].add+a[u].add)%p; a[u<<1|1].add=(long long)(a[u].mula[u<<1|1].add+a[u].add)%p; a[u].add=0,a[u].mul=1; } void update_add(int u,int l,int r,int k){ if(a[u].l>=l&&a[u].r<=r){ a[u].add=(a[u].add+k)%p; a[u].sum=(long long)(a[u].sum+k*(a[u].r-a[u].l+1))%p; return; } pushdown(u); pushup(u); int mid=a[u].l+a[u].r>>1; if(l<=mid)update_add(u<<1,l,r,k); if(mid<r)update_add(u<<1|1,l,r,k); pushup(u); } void update_mul(int u,int l,int r,int k){ if(a[u].l>=l&&a[u].r<=r){ a[u].add=(a[u].addk)%p; a[u].mul=(a[u].mulk)%p; a[u].sum=(a[u].sum*k)%p; return; } pushdown(u); pushup(u); int mid=a[u].l+a[u].r>>1; if(l<=mid)update_mul(u<<1,l,r,k); if(mid<r)update_mul(u<<1|1,l,r,k); pushup(u); } long long query(int u,int l,int r){ if(a[u].l>=l&&a[u].r<=r){ return a[u].sum; } long long ans=0; pushdown(u); int mid=a[u].l+a[u].r>>1; if(l<=mid)ans+=query(u<<1,l,r); if(mid<r)ans+=query(u<<1|1,l,r); return ans; } int op,e,f,c; int main(){

scanf("%d%d%d",&n,&m,&p);
for(int i=1;i<=n;i++){
	scanf("%d",&data[i]);
}
build(1,1,n);
for(int i=1;i<=m;i++){
	scanf("%d",&op);
	if(op==1){
		scanf("%d%d%d",&e,&f,&c);
		update_mul(1,e,f,c);
	}
	if(op==2){
		scanf("%d%d%d",&e,&f,&c);
		update_add(1,e,f,c)```cpp

#include<bits/stdc++.h> using namespace std; const int N=1e5+10; struct segtree{ int l,r; long long sum; int add,mul; }a[N<<2]; int data[N]; int n,m,p; void pushup(int u){ a[u].sum=(a[u<<1].sum+a[u<<1|1].sum)%p; } void build(int u,int l,int r){ a[u].l=l,a[u].r=r; a[u].add=0,a[u].mul=1; if(l==r){ a[u].sum=data[l]; return; } int mid=l+r>>1; build(u<<1,l,mid); build(u<<1|1,mid+1,r); pushup(u); } void pushdown(int u){ a[u<<1].sum=(long long)(a[u].mula[u<<1].sum+(a[u<<1].r-a[u<<1].l+1)a[u].add%p)%p; a[u<<1].sum=(long long)(a[u].mula[u<<1|1].sum+(a[u<<1|1].r-a[u<<1|1].l+1)a[u].add%p)%p; a[u<<1].mul=(long long)(a[u<<1].mula[u].mul)%p; a[u<<1|1].mul=(long long)(a[u<<1|1].mula[u].mul)%p; a[u<<1].add=(long long)(a[u].mula[u<<1].add+a[u].add)%p; a[u<<1|1].add=(long long)(a[u].mula[u<<1|1].add+a[u].add)%p; a[u].add=0,a[u].mul=1; } void update_add(int u,int l,int r,int k){ if(a[u].l>=l&&a[u].r<=r){ a[u].add=(a[u].add+k)%p; a[u].sum=(long long)(a[u].sum+k*(a[u].r-a[u].l+1))%p; return; } pushdown(u); pushup(u); int mid=a[u].l+a[u].r>>1; if(l<=mid)update_add(u<<1,l,r,k); if(mid<r)update_add(u<<1|1,l,r,k); pushup(u); } void update_mul(int u,int l,int r,int k){ if(a[u].l>=l&&a[u].r<=r){ a[u].add=(a[u].addk)%p; a[u].mul=(a[u].mulk)%p; a[u].sum=(a[u].sum*k)%p; return; } pushdown(u); pushup(u); int mid=a[u].l+a[u].r>>1; if(l<=mid)update_mul(u<<1,l,r,k); if(mid<r)update_mul(u<<1|1,l,r,k); pushup(u); } long long query(int u,int l,int r){ if(a[u].l>=l&&a[u].r<=r){ return a[u].sum; } long long ans=0; pushdown(u); int mid=a[u].l+a[u].r>>1; if(l<=mid)ans+=query(u<<1,l,r); if(mid<r)ans+=query(u<<1|1,l,r); return ans; } int op,e,f,c; int main(){

scanf("%d%d%d",&n,&m,&p);
for(int i=1;i<=n;i++){
	scanf("%d",&data[i]);
}
build(1,1,n);
for(int i=1;i<=m;i++){
	scanf("%d",&op);
	if(op==1){
		scanf("%d%d%d",&e,&f,&c);
		update_mul(1,e,f,c);
	}
	if(op==2){
		scanf("%d%d%d",&e,&f,&c);
		update_add(1,e,f,c);
	}
	if(op==3){
		scanf("%d%d",&e,&f);
		printf("%lld\n",query(1,e,f));
	}
}
return 0;

}

;
		}
		if(op==3){
			scanf("%d%d",&e,&f);
			printf("%lld\n",query(1,e,f));
		}
	}
	return 0;
}
2024/10/2 21:56
加载中...