#include <cstdio>
#include <iostream>
#include <algorithm>
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
struct orz
{
int l, r, num;
}c[800010];
void pushup(int p)
{
c[p].num = max(c[p * 2].num, c[p * 2 + 1].num);
}
void update(int p, int x, int v)
{
if(c[p].l == x && c[p].r == x)
{
c[p].num = v;
return;
}
int mid = (c[p].l + c[p].r) / 2;
if(x <= mid)
{
update(p * 2, x, v);
}
else
{
update(p * 2 + 1, x, v);
}
pushup(p);
}
int query(int p, int l, int r)
{
if(c[p].l >= l && c[p].r <= r)
{
return c[p].num;
}
int ans = -1;
int mid = (c[p].l + c[p].r) / 2;
if(l <= mid)
{
ans = max(ans, query(p * 2, l, r));
}
if(r > mid)
{
ans = max(ans, query(p * 2 + 1, l, r));
}
return ans;
}
int main()
{
int m, p;
scanf("%d %d", &m, &p);
int L = 0, a = 0;
while(m--)
{
string op;
cin >> op;
if(op == "Q")
{
int l;
scanf("%d", &l);
a = query(1, L - l + 1, L);
printf("%d\n", a);
}
else
{
int t;
scanf("%d", &t);
update(1, ++L, (t + a) % p);
}
}
return 0;
}
样例过了,洛谷线段树1这份代码也过了,但是全Wa/kk
求助