七十分 后三个点过不去
查看原帖
七十分 后三个点过不去
230808
Zxsoul楼主2020/10/7 11:17
/*
Name:线段树 
Author:BZQ
Date: 
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>
using namespace std;
const int N=1e6+10;
typedef long long ll;
int n,m;
struct pp{
	int l,r;
	ll sum;
	ll add;
}a[N<<2+2];
ll val[N+2];
void build(int i,int l,int r){//建树 
	a[i].l = l;a[i].r = r;
	if(l == r){
		a[i].sum = val[l];
		return ;
	}
	int mid = (l+r)>>1;
	build(i<<1,l,mid);
	build(i<<1|1,mid+1,r);
	a[i].sum = a[i<<1].sum + a[i<<1|1].sum;	
} 
void down(int i){
	if(a[i].add){
		int x = a[i].add ;
		a[i<<1].add +=x;
		a[i<<1|1].add+=x;
		a[i<<1].sum +=(a[i<<1].r -a[i<<1].l+1)*x;
		a[i<<1|1].sum+=(a[i<<1|1].r-a[i<<1|1].l+1)*x;
		a[i].add = 0; 
	}
} 
void up(int i){
	a[i].sum = 0;
	if(a[i<<1].l) a[i].sum +=a[i<<1].sum ;
	if(a[i<<1|1].l ) a[i].sum +=a[i<<1|1].sum ; 
}
void updata(int i,int x,int y){//单点修改 
	if(a[i].l == a[i].r){
		a[i].sum +=y;
		return ;
	}
	int mid=(a[i].l +a[i].r)>>1;
	if(x <= mid) updata(i<<1,x,y);
	else updata(i<<1|1,x,y);
    up(i);
} 
void all_updata(int i,int l,int r,int add){
	if(a[i].l == l&&a[i].r ==r){
		a[i].sum+=(a[i].r - a[i].l +1)*add;
		a[i].add +=add;
		return; 
	} 
	down(i);
	int mid=(a[i].l+a[i].r)>>1;
	if(mid >= r)all_updata(i<<1,l,r,add);
	else if(mid <l)all_updata(i<<1|1,l,r,add);
	else all_updata(i<<1,l,mid,add),all_updata(i<<1|1,mid+1,r,add);
	up(i);
	}
int query(int i,int l,int r){//区间查询,
	if(a[i].l >= l&&a[i].r <= r)return a[i].sum;
	down(i);
	int mid = (a[i].l + a[i].r)>>1;
	ll ans = 0;
	if(mid >= r)  
		return query(i<<1,l,r);
	else 
		if(mid<l)
		return query(i<<1|1,l,r);
		return query(i<<1,l,mid)+query(i<<1|1,mid+1,r);
}
int main(){
//	freopen("ddd.in","w",stdin);
	//freopen("ddd.in","r",stdout) ;
    cin>>n>>m;
    for(int i = 1;i <= n; i++){
    	cin>>val[i];
	}
	build(1,1,n);
	for(int i = 1;i <= m; i++){
		ll  x,y,z,k;
		cin>>x;
		if(x==1)
		{
			cin>>y>>z>>k;
			all_updata(1,y,z,k); 
		}
		if(x==2){
			cin>>y>>z;
			cout<<query(1,y,z)<<endl;
		}
	}
	return 0;
}


2020/10/7 11:17
加载中...