样例WA求助
查看原帖
样例WA求助
136939
tanghairong楼主2021/8/17 10:16
#include<iostream>
using namespace std;
int pre[100005];
struct tree{
	int l,r,value,lazy;
}a[400005];
void build(int number,int start,int end){
	a[number].l=start;
	a[number].r=end;
	if(start==end){
		a[start].value=pre[start];
		return;
	}
	int mid=(start+end)/2;
	build(2*number,start,mid);
	build(2*number+1,mid+1,end);
	a[number].value=a[number*2].value+a[number*2+1].value;
}
void pushdown(int number){
	a[number*2].value+=a[number].lazy*(a[number*2].r-a[number*2].l+1);
	a[number*2+1].value+=a[number].lazy*(a[number*2+1].r-a[number*2+1].l+1);
	a[number*2].lazy+=a[number].lazy;
	a[number*2+1].lazy+=a[number].lazy;
	a[number].lazy=0;
}
void change(int number,int start,int end,int plus){
	if(start<=a[number].l&&end>=a[number].r){
		a[number].value+=plus*(a[number].r-a[number].l+1);
		a[number].lazy+=plus;
		return;
	}
	pushdown(number);
	if(start<=a[number*2].r)change(number*2,start,end,plus);
	if(end>=a[number*2+1].l)change(number*2+1,start,end,plus);
	a[number].value=a[number*2].value+a[number*2+1].value;
}
int query(int number,int start,int end){
	int sum=0;
	if(start<=a[number].l&&end>=a[number].r)return a[number].value;
	pushdown(number);
	if(start<=a[number*2].r)sum+=query(number*2,start,end);
	if(end>=a[number*2+1].l)sum+=query(number*2+1,start,end);
	return sum;
}
int main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)cin>>pre[i];
	build(1,1,n);
	for(int i=1;i<=m;i++){
		int flag,x,y,k;
		cin>>flag>>x>>y;
		if(flag==1){
			cin>>k;
			change(1,x,y,k);
		}
		if(flag==2)cout<<query(1,x,y)<<endl;
	}
	return 0;
}

样例都过不去,哪位大佬帮忙找找错???感激不尽

如果能@我就更好了qwq

2021/8/17 10:16
加载中...