st表qqqqqqqqqqq看看
查看原帖
st表qqqqqqqqqqq看看
105820
阿尔托莉雅丶楼主2021/3/10 16:25
#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

2021/3/10 16:25
加载中...