求助,100分未过
查看原帖
求助,100分未过
803851
hualuo_2楼主2023/10/15 14:35

如题,在十个ac后下面有一个wa

#include <bits/stdc++.h>

using namespace std;

const int N = 200010;
struct node {
    int l, r;
    int data;
};
int m, p;
node t[4 * N];


void pushup(int u) {
    t[u].data = max(t[u << 1].data, t[u << 1 | 1].data);
}

void build(int u, int l, int r) {
    t[u].l = l, t[u].r = r;
    if (l == r)
        return;
    int mid = l + r >> 1;
    build(u << 1, l, mid);
	build(u << 1 | 1, mid + 1, r);
}

int query(int u, int l, int r) {
    
    if (l <= t[u].l && r >= t[u].r)
        return t[u].data;
    int mid = t[u].l + t[u].r >> 1;
    int res = 0;
    if (l <= mid)
        res = max(res, query(u << 1, l, r));
    if (r >= mid + 1)
        res = max(res, query(u << 1 | 1, l, r));
    return res;
}


void modify(int u, int x, int v) {
    if (t[u].l == x && t[u].r == x) {
        t[u].data = v;
        return;
    }
    int mid = t[u].l + t[u].r >> 1;
    if (x <= mid)
        modify(u << 1, x, v);
    else 
        modify(u << 1 | 1, x, v);
    pushup(u);
}

int main() {
    cin >> m >> p;
    int cnt = 0;
    int last = 0;
    build(1, 1, m);
    char op[2];
    int x;
    while (m--) {
        scanf("%s%d", &op, &x);
        if (op[0] == 'Q') {
            last = query(1, cnt - x + 1, cnt);
            printf("%d\n", last);
        } else {
            modify(1, cnt + 1, (last + x) % p);
            cnt++;
        }
    }
    return 0;
}
2023/10/15 14:35
加载中...