为啥总是TLE!!!
查看原帖
为啥总是TLE!!!
415773
OIer_ACMer楼主2022/12/22 22:39
#include <bits/stdc++.h>
using namespace std;
const long long inf = -(1 << 62);
int m, cnt;
char x;
long long data[800005], n, t, p;
void add(int s, int k, int o, int l, int r)
{
    if (l == r)
    {
        data[o] = k;
        return;
    }
    int mid = (l + r) >> 1;
    if (mid >= s)
    {
        add(s, k, o << 1, l, mid);
    }
    if (mid < s)
    {
        add(s, k, o << 1 | 1, mid + 1, r);
    }
    data[o] = max(data[o << 1], data[o << 1 | 1]) % p;
}
long long ask(int ll, int rr, int o, int l, int r)
{
    if (ll <= l && rr >= r)
    {
        return data[o];
    }
    int mid = (l + r) >> 1;
    long long a = inf, b = inf;
    if (mid >= ll)
    {
        a = ask(ll, rr, o << 1, l, mid);
    }
    if (mid < rr)
    {
        b = ask(ll, rr, o << 1 | 1, mid + 1, r);
    }
    return max(a, b);
}
int main()
{
    cin >> m >> p;
    while (m--)
    {
        cin >> x >> n;
        if (x == 'A')
        {
            add(cnt + 1, (n + t) % p, 1, 1, m);
            cnt++;
        }
        if (x == 'Q')
        {
            if (n == 0)
            {
                t = 0;
            }
            else
            {
                t = ask(cnt - n + 1, cnt, 1, 1, m) % p;
            }
            cout << t << '\n';
        }
    }
    fflush(stdin);
    return 0;
}

代码如上

2022/12/22 22:39
加载中...