码风良好,求调
查看原帖
码风良好,求调
1058749
King_and_Grey楼主2025/1/24 22:36
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl "\n"
const int maxn = 1e5;
int a[maxn + 5],lzy[maxn * 4 + 5],w[maxn * 4 + 5];
bool in_range(int L,int R,int l,int r){
	return (l <= L) && (R <= r);
}
bool out_range(int L,int R,int l,int r){
	return (L > r) && (R > l);
}
void maketag(const int u,int len,int x){
	lzy[u] += x;
	w[u] += len * x;
}
void pushdown(const int u,int l,int r){
	int m = (l + r) / 2;
	maketag(u * 2,m - l + 1,lzy[u]),maketag(u * 2 + 1,r - m,lzy[u]);
	lzy[u] = 0;
}
void pushup(const int u){
	w[u] = w[u * 2] + w[u * 2 + 1];
}
void built(const int u,int l,int r){
	if(l == r){
		w[u] = a[l];
		return;
	}
	int m = (l + r) / 2;
	built(u * 2,l,m),built(u * 2 + 1,m + 1,r);
}
int query(const int u,int L,int R,int l,int r){
	if(in_range(L,R,l,r)){
		return w[u];
	}else{
		if(out_range(L,R,l,r)){
			return 0;
		}else{
			int m = (L + R) / 2;
			pushdown(u,L,R);
			return query(u * 2,L,m,l,r) + query(u * 2 + 1,m + 1,R,l,r);
		}
	}
}
void update(const int u,int L,int R,int l,int r,int x){
	if(in_range(L,R,l,r)){
		maketag(u,R - L + 1,x);
	}else{
		if(out_range(L,R,l,r)){
			return;
		}else{
			int m = (L + R) / 2;
			pushdown(u,L,R);
			update(u * 2,L,m,l,r,x),update(u * 2 + 1,m + 1,R,l,r,x);
			pushup(u);
		}
	}
}
int n,m;
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin >> n >> m;
	for(int i = 1;i <= n;i++){
		cin >> a[i];
	}
	built(1,1,n);
	for(int i = 1,opt;i <= m;i++){
		cin >> opt;
		if(opt == 1){
			int x,y,k;
			cin >> x >> y >> k;
			update(1,1,n,x,y,k);
		}else{
			int x,y;
			cin >> x >> y;
			cout << query(1,1,n,x,y) << endl;
		}
	}
	return 0;
}

不知道,为什么 RE\color{purple}{\text{RE}} ,求大佬指点。

@I_AK_CTSC @keep_shining

2025/1/24 22:36
加载中...