70分求助,最后三个极限数据WA了,改了数组大小也没啥用qwq
查看原帖
70分求助,最后三个极限数据WA了,改了数组大小也没啥用qwq
344230
a_vegetable_chicken楼主2022/6/11 20:36
#include<bits/stdc++.h>
#define M 1000001
using namespace std;

int n , q;
int tree[M * 4] , a[M];
int lazy[M * 4];
int k;

void maketree(int node , int l , int r){
	if(l == r){
		tree[node] = a[l];
	}
	else{
		int mid = l + (r - l) / 2;
		maketree(node * 2 , l , mid);
		maketree(node * 2 + 1 , mid + 1 , r);
		tree[node] = tree[node * 2] + tree[node * 2 + 1];
	}
}

void pushdown(int node , int l , int r){
	int mid = l + (r - l) / 2;
	tree[node * 2] += lazy[node] * (mid - l + 1);
	lazy[node * 2] += lazy[node];
	tree[node * 2 + 1] += lazy[node] * (r - mid);
	lazy[node * 2 + 1] += lazy[node];
	lazy[node] = 0;
}


void add(int node , int l , int r , int ll , int rr){
	if(ll == l && rr == r){
		lazy[node] += k;
		tree[node] += k * (r - l + 1);
		return ;
	}
	
	int mid = l + (r - l) / 2;
	if(lazy[node]){
		pushdown(node , l , r);
	}
	
	if(rr <= mid){
		add(node * 2 , l , mid , ll , rr);
	}
	else if(ll > mid){
		add(node * 2 + 1 , mid + 1 , r , ll , rr);
	}
	else{
		add(node * 2 , l , mid , ll , mid);
		add(node * 2 + 1 , mid + 1 , r , mid + 1 , rr);
	}
	tree[node] = tree[node * 2 ] + tree[node * 2 + 1];
}

int check(int node , int l , int r , int ll , int rr){
	if(ll == l && rr == r) return tree[node];
	if(lazy[node] != 0){
		pushdown(node , l , r);
	}
	int mid = l + (r - l) / 2;
	if(rr <= mid){
		return check(node * 2 , l , mid , ll , rr);
	}
	if(ll > mid){
		return check(node * 2 + 1 , mid + 1 , r , ll , rr);
	}
	else{
		return check(node * 2 , l , mid , ll , mid) + check(node * 2 + 1 , mid + 1 , r , mid + 1 , rr);
	}
}



int main(){
	scanf("%d%d" , &n , &q);
	for(int i = 1 ; i <= n ; i++){
		scanf("%d" , &a[i]);
	}
	maketree(1 , 1 , n);
	
	while(q--){
		int type , x , y ;
		scanf("%d" , &type);
		if(type == 1){
			scanf("%d%d%d" , &x , &y , &k);
			add(1 , 1 , n , x , y);
		}
		if(type == 2){
			scanf("%d%d" , &x, &y);
			printf("%d\n" , check(1 , 1, n , x , y) );
		}
	}
	return 0;
}

2022/6/11 20:36
加载中...