rt,代码如下
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N = 1e5 * 2 + 10;
const ll INF = (long long)1e62;
int m, D, len, t;
ll maxv[4 * N];
void pushup(int root) {
maxv[root] = max(maxv[root * 2], maxv[root * 2 + 1]) % D;
}
void update(int root, int l, int r, int k, ll v) {
if (l == r) {
maxv[root] = v;
return;
}
int mid = (l + r) / 2;
if (mid >= k) {
update(root * 2, l, mid, k, v);
}
if (mid < k) {
update(root * 2 + 1, mid + 1, r, k, v);
}
pushup(root);
}
ll query(int root, int l, int r, int x, int y) {
if (x <= l && r <= y) {
return maxv[root];
}
int mid = (l + r) / 2;
ll lson = -INF, rson = -INF;
if (mid >= x) {
lson = query(root * 2, l, mid, x, y);
}
if (mid < y) {
rson = query(root * 2 + 1, mid + 1, r, x, y);
}
return max(lson, rson);
}
int main() {
cin >> m >> D;
for (int i = 1; i <= m; i++) {
char op;
int a;
cin >> op >> a;
if (op == 'Q') {
int res = query(1, len - a + 1, len, 1, m);
t = res % D;
cout << res << endl;
} else {
update(1, 1, m, len + 1, (a + t) % D);
len++;
}
}
return 0;
}
蟹蟹各位dalao!