Luo Gu P1198 [JSOI2008] The maximum number of (single-point modification, query interval)

Luo Gu P1198 [JSOI2008] The maximum number of

Simple tree line of a single point.

Question: reading Aand Qwhen, according to a read characters MLE , read into the string on it.

#include<bits/stdc++.h>

using namespace std;
#define lson l, mid, root << 1
#define rson mid + 1, r, root << 1 | 1

const int maxn = 200005;
long long MAX[maxn << 2], D, t, xx;
int M, len;
char c[5];

inline void pushDown(int root){
    MAX[root] = max(MAX[root << 1], MAX[root << 1 | 1]);
}
void update(int l, int r, int root, int pos, long long x)
{
    if(l == r){
        MAX[root] = x; return;
    }
    int mid = (l + r) >> 1;
    if(pos <= mid) update(lson, pos, x);
    else update(rson, pos, x);
    pushDown(root);
}
long long query(int l, int r, int root, int L, int R)
{
    if(L == l && R == r){
        return MAX[root];
    }
    int mid = (l + r) >> 1;
    if(R <= mid) return query(lson, L, R);
    else if(L >= mid + 1) return query(rson, L, R);
    else return max(query(lson, L, mid), query(rson, mid + 1, R));
}
int main()
{
    scanf("%d%lld", &M, &D);
    for(int i = 1; i <= M; i++){
        scanf("%s%lld", c, &xx);
        if(c[0] == 'A'){
            xx = (t * 1LL + xx) % D;
            len++;
            update(1, M, 1, len, xx);
        }
        else{
            t = query(1, M, 1, (int)(len - xx + 1), len) % D;
            printf("%lld\n", t);
        }
    }
    return 0;
}

Guess you like

Origin www.cnblogs.com/solvit/p/11469407.html