线段树RE求助
查看原帖
线段树RE求助
167697
BartAllen楼主2023/11/29 13:00
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

const ll N = 2e5 + 5;

struct Segment_Tree {
	ll l, r, mx;
} t[N * 4];

ll m, d, temp, len, n;

void update(ll p) {
	t[p].mx = max(t[p * 2].mx, t[p * 2 + 1].mx);
}

void build(ll l, ll r, ll p) {
	t[p].l = l, t[p].r = r;
	if (l == r) return;
	ll mid = (l + r) >> 1;
	build(p * 2, l, mid);
	build(p * 2 + 1, mid + 1, r);
}

void change(ll p, ll x, ll v) {
	if (t[p].l == t[p].r) {
		t[p].mx = v;
		return;
	}
	ll mid = (t[p].l + t[p].r) >> 1;
	if (x <= mid) change(p * 2, x, v);
	else change(p * 2 + 1, x, v);
	update(p);
}

ll query(ll p, ll l, ll r) {
	if (l <= t[p].l && r >= t[p].r) return t[p].mx;
	ll mid = (t[p].l + t[p].r) >> 1;
	ll val = -0x3f3f3f3f;
	if (l <= mid) val = max(val, query(p * 2, l, r));
	if (r > mid) val = max(val, query(p * 2 + 1, l, r));
	return val;
}

signed main() {
	cin >> m >> d;
	build(1, 1, m);
	for (ll i = 1; i <= m; i++) {
		char op;
		ll x;
		cin >> op >> x;
		if (op == 'Q') {
			temp = query(1, n - x + 1, n);
			cout << t << endl;
		}
		else change(1, ++n, (x + temp) % d);
	}
	return 0;
}
2023/11/29 13:00
加载中...