TLE,RE求助
查看原帖
TLE,RE求助
602624
___njr___楼主2023/4/30 23:51
#include<bits/stdc++.h>
using namespace std;
#define MAXN 80100
#define int long long
int tree[MAXN * 4];
int sum[MAXN];
int a[MAXN];
int n;
int kmin, kmax, t, mod;
inline void build(int x, int l, int r) {
	if (l == r)tree[x] = l % mod;
	else {
		int mid = (l + r) >> 1;
		build(2 * x, l, mid);
		build(2 * x + 1, mid + 1, r);
		tree[x] = tree[2 * x] + tree[2 * x + 1] % mod;
	}
}
inline void add(int val, int l, int r, int x, int gl, int gr) {
	if (gl == gr)if (l == gl)if (l == r)tree[x] = tree[x] + val % mod;
	int mid = (gl + gr) / 2;
	if (r == mid) add(val, l, mid, 2 * x, gl, mid);
	else if (r > mid) {
		add(val, l, mid, 2 * x, gl, mid);
		add(val, mid + 1, r, 2 * x + 1, mid + 1, gr);
	} else if (l == mid)add(val, mid, r, 2 * x + 1, mid, gr);
	else if (l > mid) add(val, mid + 1, r, 2 * x + 1, mid + 1, gr);
	else if (l < mid)add(val, l, mid, 2 * x, gl, mid);
}
int cnt = 0;
inline void init(int l, int r) {
	if (l == r) a[++cnt] = l * cnt % mod;
	else {
		int mid = (l + r) >> 1;
		init(l, mid);
		init(mid + 1, r);
	}
}
pair<int, int> pv[1010];
int tmp_pv = 0;
signed main() {
	cin >> n >> t >> mod >> kmin >> kmax;
	for (int i  = 1; i <= n; ++i)cin >> a[i];
	build(1, 1, n);
	while (t--) {
		char c;
		int l, r;
		scanf("%c %d %d", &c, &l, &r);
		if (c == 'A') {
			int x;
			cin >> x;
			add(x, l, r, 1, 1, n);
		} else pv[++tmp_pv] = make_pair(l, r);
	}
	init(1, n);
	for (int i = 1; i <= n ; ++i) sum[i] = sum[i - 1] + a[i];
	for (int i = 1; i <= tmp_pv; ++i) cout << sum[pv[i].second + 1] - sum[pv[i].first] << endl;
	int q;
	cin >> q;
	while (q--) {
		int l, r;
		cin >> l >> r;
		cout << sum[r + 1] - sum[l] << endl;
	}
	return 0;
}
2023/4/30 23:51
加载中...