玄关求助
查看原帖
玄关求助
1059011
_Megumi楼主2024/7/20 09:59
#include<iostream>
#include<cmath>
#include<unordered_map>
#include<cstring>
#include<sstream>
#include<string>
#include<vector>
#include<queue>
#include<algorithm>
#include<iomanip>
#include<map>
#include<set>
using namespace std;
#define int long long
const int mod = 1e9 + 7;

int n, m, a[100001], t[400001], lf[400001], ld[400001];

void build(int x, int l, int r) {
	if (l == r) {
		t[x] = a[l];
		return;
	}
	int mid = l + r >> 1;
	build(x << 1, l, mid);
	build(x << 1 | 1, mid + 1, r);
	t[x] = t[x << 1] + t[x << 1 | 1];
}

void update(int ll, int rr, int k, int d, int x, int l, int r) {
	if (rr < l || ll > r) return;
	if (ll <= l && r <= rr) {
		t[x] += (r - l + 1) * (k + k + (r - l) * d) / 2;
		lf[x] += k;
		ld[x] += d;
		return;
	}
	int mid = l + r >> 1;
	lf[x << 1] += lf[x];
	lf[x << 1 | 1] += lf[x] + ld[x] * (mid + 1 - l);
	ld[x << 1] += ld[x];
	ld[x << 1 | 1] += ld[x];
	lf[x] = ld[x] = 0;
	update(ll, rr, k, d, x << 1, l, mid);
	if (ll <= mid + 1 && mid + 1 <= rr) {
		if (l >= ll) update(ll, rr, k + (mid + 1 - l) * d, d, x << 1 | 1, mid + 1, r);
		else update(ll, rr, k + (mid + 1 - ll) * d, d, x << 1 | 1, mid + 1, r);
	}
	else update(ll, rr, k, d, x << 1 | 1, mid + 1, r);
	t[x] = t[x << 1] + t[x << 1 | 1];
}

int query(int ll, int rr, int x, int l, int r) {
	if (rr < l || ll > r) return 0;
	if (ll <= l && r <= rr) {
		return t[x];
	}
	int mid = l + r >> 1;
	lf[x << 1] += lf[x];
	lf[x << 1 | 1] += lf[x] + ld[x] * (mid + 1 - l);
	ld[x << 1] += ld[x];
	ld[x << 1 | 1] += ld[x];
	lf[x] = ld[x] = 0;
	return query(ll, rr, x << 1, l, mid) + query(ll, rr, x << 1 | 1, mid + 1, r);
}

void solve() {
	cin >> n >> m;
	for (int i = 1; i <= n; i++) cin >> a[i];
	build(1, 1, n);
	while (m--) {
		int x, l, r, k, d;
		cin >> x;
		if (x == 1) {
			cin >> l >> r >> k >> d;
			update(l, r, k, d, 1, 1, n);
		}
		else {
			cin >> k;
			cout << query(k, k, 1, 1, n) << endl;
		}
	}
}

signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int t = 1;
	//cin >> t;
	while (t--) solve();
}
2024/7/20 09:59
加载中...