#include <iostream>
using namespace std;
const int N = 2e5 + 5;
long long m, d, t = 0, x, n;
long long st[N][23], lg[N];
char op;
int main(void)
{
cin >> m >> d;
lg[0] = -1;
for(int i = 1; i <= N; i++)
lg[i] = lg[i >> 1] + 1;
while(m--)
{
cin >> op >> x;
if(op == 'A')
{
st[++n][0] = (x + t) % d;
for(int i = 0; n - (1 << i) + 1 > 0; i++)
st[n - (1 << i) + 1][i] = max(st[n - (1 << i) + 1][i], st[n][0]);
}
else
{
int len = lg[x];
t = max(st[n - x + 1][len], st[n - (1 << len) + 1][len]);
cout << t << '\n';
}
}
return 0;
}
对于新加的只需更新所有n- 2^i + 1 到 n的最大值
其他都不变
dalao看看哪里错了
或者是思路错了QAQ