大佬求助QWQ
查看原帖
大佬求助QWQ
1034274
2023jjezxj楼主2025/7/27 15:58
#include <bits/stdc++.h>
using namespace std;
const int N = 1e7 + 10;
int n, q, k, a, b, c, x;
int sum[N], add[N], o[N];
void update(int k, int l, int r, int x) {
	sum[k] += (r - l + 1) * x;
	add[k] += x;
}
void pushdown(int k, int l, int r) {
	if (add[k] == 0) return;
	int mid = (l + r) >> 1;
	update(k << 1, l, mid, add[k]);
	update(k << 1 | 1, mid + 1, r, add[k]);
	add[k] = 0;
}
int query(int k, int l, int r, int a, int b) {
	if (a <= l && b >= r)
		return sum[k];
	pushdown(k, l, r);
	int mid = (l + r) >> 1, cnt = 0;
	if (a <= mid)
		cnt += query(k << 1, l, mid, a, b);
	if (b > mid)
		cnt += query(k << 1 | 1, mid + 1, r, a, b);
	return cnt;
}
void Add(int k, int l, int r, int a, int b, int x) {
	if (a <= l && b >= r) {
		update(k, l, r, x);
		return;
	}
	pushdown(k, l, r);
	int mid = (l + r) >> 1;
	if (a <= mid) Add(k << 1, l, mid, a, b, x);
	if (b > mid) Add(k << 1 | 1, mid + 1, r, a, b, x);
	sum[k] = sum[k << 1] + sum[k << 1 | 1];
}
void build(int k, int l, int r) {
	if (l == r) {
		sum[k] = o[l];
		return;
	}
	int mid = (l + r) >> 1;
	build(k << 1, l, mid);
	build(k << 1 | 1, mid + 1, r);
	sum[k] = sum[k << 1] + sum[k << 1 | 1];
}
int main() {
	cin >> n >> q;
	for (int i = 1; i <= n; i++)
		cin >> o[i];
	build(1, 1, n);
	while (q--) {
		cin >> c >> a >> b;
		if (c == 1) {
			cin >> x;
			Add(1, 1, n, a, b, x);
		}
		else
			cout << query(1, 1, n, a, b) << endl;
	}
	return 0;
}
2025/7/27 15:58
加载中...