蒟蒻的猜想
查看原帖
蒟蒻的猜想
196016
FANwry楼主2024/3/6 15:52

能不能不用线段树而只用差分,先在输入时记录下所有问题,最后再统一回复?

#include <bits/stdc++.h>
#define ll long long int
#define N 100010
using namespace std;
ll n, m, mid[N], dif[N], sum[N], tip[N], q[N], cnt;

int main() {
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		cin >> sum[i];
		mid[i] = sum[i] - sum[i - 1];
		dif[i] = mid[i] - mid[i - 1];
	}
	for (int i = 1; i <= m; i++) {
		int p;
		cin >> p;
		if (p == 1) {
			int l, r, k, d;
			cin >> l >> r >> k >> d;
			tip[l] += k;
			dif[l + 1] += d;
			dif[r + 1] -= d;
			tip[r + 1] -= ((r - l) * d + k);
		} else {
			cnt++;
			cin >> q[cnt];
		}
	}
	for (int i = 1; i <= n; i++) {
		mid[i] = dif[i] + mid[i - 1];
	}
	for (int i = 1; i <= n; i++) {
		mid[i] += tip[i];
		sum[i] = mid[i] + sum[i - 1];
		//cout << sum[i] << " ";
	}
	//cout << endl;
	for (int i = 1; i <= cnt; i++) {
		cout << sum[q[i]] << endl;
	}
}

求助啊~~~orz

2024/3/6 15:52
加载中...