WA了,求调!
查看原帖
WA了,求调!
1007677
bianyanze楼主2024/9/18 22:26
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int data[N];
struct segtree{
	int l,r,lazy,sum;
}a[N<<2];
void pushup(int u){
	a[u].sum=a[u<<1].sum+a[u<<1|1].sum;
}
void build(int u,int l,int r){
	a[u].l=l;
	a[u].r=r;
	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){
	if(a[u].lazy){
		a[u<<1].sum+=a[u].lazy*(a[u<<1].r-a[u<<1].l+1);
		a[u<<1|1].sum+=a[u].lazy*(a[u<<1|1].r-a[u<<1|1].l+1);
		a[u<<1].lazy+=a[u].lazy;
		a[u<<1|1].lazy+=a[u].lazy;
		a[u].lazy=0;
	}
}
void update(int l,int r,int k,int u){
	if(l<=a[u].l&&r>=a[u].r){
		a[u].sum+=k*(r-l+1);
		a[u].lazy+=k;
		return;
	}
	pushdown(u);
	int mid=a[u].l+a[u].r>>1;
	if(l<=mid)update(l,r,k,u<<1);
	if(r>mid)update(l,r,k,u<<1|1);
	pushup(u);
}
long long query(int u,int l,int r){
	if(l<=a[u].l&&r>=a[u].r)return a[u].sum;
	pushdown(u);
	long long ans=0;
	int mid=a[u].l+a[u].r>>1;
	if(l<=mid)ans+=query(u<<1,l,r);
	if(r>mid)ans+=query(u<<1|1,l,r);
	return ans;
}
inline int read(){
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-')f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+(ch&15),ch=getchar();
	return x*f;
}
int n,m;
int op,x,y,z;
int main(){

	n=read(),m=read();
	for(int i=1;i<=n;i++){
		data[i]=read();
	}
	build(1,1,n);
	for(int i=1;i<=m;i++){
		op=read();
		if(op==1){
			x=read(),y=read(),z=read();
			update(x,y,z,1);
		}else{
			x=read(),y=read();
			cout<<query(1,x,y)<<endl;
		}
	}
	return 0;
}

2024/9/18 22:26
加载中...