萌新全WA求助
查看原帖
萌新全WA求助
439207
hhw_khw楼主2021/11/23 20:33

样例能过,测试点第一个就wa了

#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
const ll MAXN = 1e5 + 10;
int n, m;
struct node {
	ll l, r;
	ll data;
	ll lazy;
} tree[MAXN << 2];
ll a[MAXN];
void build(ll p, ll l, ll r) {
	tree[p].l = l;
	tree[p].r = r;
	if (l == r) {
		tree[p].data = a[l];
		return;
	}
	ll mid = (l + r) >> 1;
	build(p << 1, l, mid);
	build(p << 1 | 1, mid + 1, r);
	tree[p].data = tree[p << 1].data + tree[p << 1 | 1].data;
}
ll addlazy(ll p, ll val) {
	tree[p].lazy = val;
	tree[p].data += (tree[p].r - tree[p].l + 1) * val;
}
ll pushdown(ll p) {
	addlazy(p << 1, tree[p].lazy);
	addlazy(p << 1 | 1, tree[p].lazy);
	tree[p].lazy = 0;
}
ll query(ll p, ll l, ll r) {
	if (tree[p].l >= l && tree[p].r <= r) {
		return tree[p].data;
	}
	pushdown(p);
	ll res = 0;
	if (tree[p << 1].r >= l) res += query(p << 1, l, r);
	if (tree[p << 1 | 1].l <= r) res += query(p << 1 | 1, l, r);
	return res;
}
void modify(ll p, ll l, ll r, ll val) {
	if (tree[p].l >= l && tree[p].r <= r) {
		addlazy(p, val);
		return;
	}
	pushdown(p);
	if (tree[p << 1].r >= l) modify(p << 1, l, r, val);
	if (tree[p << 1 | 1].l <= r) modify(p << 1 | 1, l, r, val);
	tree[p].data = tree[p << 1].data + tree[p << 1 | 1].data;
}
int main() {
	cin >> n >> m;
	for (ll i = 1; i <= n; i ++) cin >> a[i];
	build(1, 1, n);
	for (ll i = 1; i <= m; i ++) {
		int opt, x, y, k;
		cin >> opt;
		if (opt == 1) {
			cin >> x >> y >> k;
			modify(1, x, y, k);
		}
		else {
			cin >> x >> y;
			cout << query(1, x, y) << endl;
		}
	}
	return 0;
} 
2021/11/23 20:33
加载中...