0分,而且理解不了代码
查看原帖
0分,而且理解不了代码
672360
Ch35楼主2022/8/2 17:21

全WA

#include<bits/stdc++.h>
using namespace std;
const int maxn=100000;
int a[maxn],tree[4*maxn],n,m,x,y,k,addx[4*maxn];
int op;
void built(int o,int l,int r){
	if(l==r){
		tree[o]=a[l];
		return;
	}
	int m=(l+r)/2;
	built(o*2,l,m);
	built(o*2+1,m+1,r);
	tree[o]=tree[o*2]+tree[o*2+1];
}
void chaxun(int o,int l,int r){
	if(l==r){
		addx[o]+=k;
		tree[o]=k*(r-l+1);
		return;
	}
	int m=(l+r)/2;
	if(x<=m)chaxun(o*2,l,m);
	else chaxun(o*2+1,m+1,r);
	tree[o]=tree[o*2]+tree[o*2+1]+k*(r-l+1);
}
int he(int o,int l,int r,int add){
	if(x<=l&&r<=y){
		return tree[o]+add*(r-l+1);
	}
	int m=(l+r)/2,ans=0;
	if(x<=m)ans+=he(o*2,l,m,add)+(r-l+1);
	if(y>m)ans+=he(o*2+1,m+1,r,add)+(r-l+1);
	return ans;
}
int main(){
	//freopen("tree.in","r",stdin);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	built(1,1,n);
	for(int i=1;i<=m;i++){
		scanf("%d",&op);
		if(op==1){
			cin>>x>>y>>k;
			chaxun(1,x,y);
		}
		if(op==2){
			cin>>x>>y;
			printf("%d\n",he(1,1,n,0));
		}
	}
	return 0;
}
2022/8/2 17:21
加载中...