提交记录 11418


用户 题目 状态 得分 用时 内存 语言 代码长度
oldherd test. 自定义测试 Runtime Error 0 68.697 ms 588912 KB C++ 1.46 KB
提交时间 评测时间
2020-01-12 08:49:32 2023-09-03 19:39:13
#include <iostream>
#define ll long long 

using namespace std;

const int N = 123456;
ll sum[N<<2], tag[N<<2], a[N], n;
inline void update(int p) { sum[p] = sum[p<<1] + sum[p<<1|1]; }
inline void spread(int p, int llen, int rlen) {
	tag[p<<1] += tag[p];
	tag[p<<1|1] += tag[p];
	sum[p<<1] += tag[p] * llen;
	sum[p<<1|1] += tag[p] * rlen;
	tag[p] = 0;
}
void build(int p, int lp, int rp) {
	if(lp == rp) {
		sum[p] = a[lp];
		tag[p] = 0;
		return;
	}
	int mid = (lp + rp) >> 1;
	build(p<<1, lp, mid);
	build(p<<1|1, mid + 1, rp);
	update(p);
}
void change(int p, int lp, int rp, int l, int r, ll k) {
	if(l <= lp && rp <= r) {
		sum[p] += (rp - lp + 1) * k;
		tag[p] += k;
		return ;
	}
	int mid = (lp + rp) >> 1;
	if(tag[p]) spread(p, mid - lp + 1, rp - mid);
	if(l <= mid) change(p<<1, lp, mid, l, r, k);
	if(r > mid) change(p<<1|1, mid + 1, rp, l, r, k);
	update(p);
}

ll qry(int p, int lp, int rp, int l, int r) {
	if(l <= lp && rp <= r) return sum[p];
	int mid = (lp + rp) >> 1;
	if(tag[p]) spread(p, mid - lp + 1, rp - mid);
	ll ans = 0;
	if(l <= mid) ans += qry(p<<1, lp, mid, l, r);
	if(r > mid) ans += qry(p<<1|1, mid+1, rp, l, r);
	return ans;
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int m, op, x, y, k;
	cin >> n >> m;
	for(int i = 1; i <= n; ++i) {
		cin >> a[i];
	}
	build(1, 1, n);
	while(m--) {
		cin >> op >> x >> y;
		if(op == 1) {
			cin >> k;
			change(1, 1, n, x, y, k);
		} else {
			cout << qry(1, 1, n, x, y) << '\n';
		}
	}
	return 0;
}

CompilationN/AN/ACompile OKScore: N/A

Testcase #168.697 ms575 MB + 112 KBRuntime ErrorScore: 0


Judge Duck Online | 评测鸭在线
Server Time: 2026-03-27 21:07:08 | Loaded in 0 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠