求助
查看原帖
求助
1147171
chenhaoyu_ACAC楼主2024/9/18 22:07

码风良好,然后全屏 WA,求助大佬们。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=100010;
int n,q,mod,value[N],opt,x,y,z;
struct SegmentTree{
	int l,r;
	int sum,add,mul;
}tree[N<<2];
void push_up(int u){
	tree[u].sum=tree[u<<1].sum+tree[u<<1|1].sum;
}
void push_down(int u){
	auto &root=tree[u],&lson=tree[u<<1],&rson=tree[u<<1|1];
	if(root.mul){
		lson.mul+=root.mul,lson.sum*=root.mul;
		rson.mul+=root.mul,rson.sum*=root.mul;
		root.mul=0;
	}
	if(root.add){
		lson.add+=root.add,lson.sum+=(lson.r-lson.l+1)*root.add;
		rson.add+=root.add,rson.sum+=(rson.r-rson.l+1)*root.add;
		root.add=0;
	}
}
void build(int u,int l,int r){
	if(l==r){tree[u]={l,r,value[l],0,0};return ;}
	else{
		tree[u].l=l,tree[u].r=r;
		int mid=l+r>>1;
		build(u<<1,l,mid),build(u<<1|1,mid+1,r);
		push_up(u);
	}
}
void modify_add(int u,int l,int r,int x){
	if(tree[u].l>=l&&tree[u].r<=r){
		tree[u].sum+=(tree[u].r-tree[u].l+1)*x;
		tree[u].add+=x;
		return ;
	}
	else{
		push_down(u);
		int mid=tree[u].l+tree[u].r>>1;
		if(l<=mid) modify_add(u<<1,l,r,x);
		if(r>mid) modify_add(u<<1|1,l,r,x);
		push_up(u);
	}
}
void modify_mul(int u,int l,int r,int x){
	if(tree[u].l>=l&&tree[u].r<=r){
		tree[u].sum*=x;
		tree[u].mul+=x;
		return ;
	}
	else{
		push_down(u);
		int mid=tree[u].l+tree[u].r>>1;
		if(l<=mid) modify_mul(u<<1,l,r,x);
		if(r>mid) modify_mul(u<<1|1,l,r,x);
		push_up(u);
	}
}
int query(int u,int l,int r){
	if(tree[u].l>=l&&tree[u].r<=r) return tree[u].sum;
	else{
		push_down(u);
		int mid=tree[u].l+tree[u].r>>1,res=0;
		if(l<=mid) res+=query(u<<1,l,r);
		if(r>mid) res+=query(u<<1|1,l,r);
		return res%mod;
	}
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr),cout.tie(nullptr);
	cin>>n>>mod;
	for(int i=1;i<=n;i++) cin>>value[i];
	build(1,1,n);
	cin>>q;
	while(q--){
		cin>>opt>>x>>y;
		if(opt==1){
			cin>>z;
			modify_mul(1,x,y,z);
		}
		else if(opt==2){
			cin>>z;
			modify_add(1,x,y,z);
		}
		else cout<<query(1,x,y)%mod<<"\n";
	}
	return 0;
}
2024/9/18 22:07
加载中...