社区讨论

0pts求助

P1198[JSOI2008] 最大数参与者 3已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@lxzinnp4
此快照首次捕获于
2024/06/29 10:41
2 年前
此快照最后确认于
2024/06/29 14:22
2 年前
查看原帖
CPP
#include <bits/stdc++.h>

#define int long long
#define ls k << 1
#define rs k << 1 | 1

const int M = 2e5 + 5;
const int inf = -2147483648;

int m, d, que, n, t;
char ch;

struct node {
    int l, r;
    int data;
} c[M << 2];

int read() {
    int res = 0, i = 1;
    char c = getchar();
    while (c < '0' || c > '9') {
        if (c == '-') i = -i;
        c = getchar();
    }
    while (c >= '0' && c <= '9') {
        res = res * 10 + c - '0';
        c = getchar();
    }
    return res * i;
}

void write(int x) {
    if (x < 0) {
        putchar('-');
        x = -x;
    }
    if (x > 9) write(x / 10);
    putchar(x % 10 + '0');
}

void build(int k, int l, int r) {
    // write(k),puts("");
    // c[k].data = inf;
    c[k].l = l, c[k].r = r;
    if (l == r) return;
    int mid = l + r >> 1;
    build(ls, l, mid);
    build(rs, mid + 1, r);
}

void modify(int k, int pos, int val) {
    if (c[k].l == c[k].r) {
        c[k].data = val;
        return;
    }
    int mid = c[k].l + c[k].r >> 1;
    if (pos <= mid) modify(ls, pos, val);
    if (pos > mid) modify(rs, pos, val);
    c[k].data = std::max(c[ls].data, c[rs].data);
}

int query(int k, int l, int r) {
    if (l <= c[k].l && c[k].r <= r) return c[k].data;
    int mid = c[k].l + c[k].r >> 1, res1 = inf, res2 = inf;
    if (l <= mid) res1 = query(ls, l, r);
    if (r > mid) res2 = query(rs, l, r);
    return std::max(res1, res2);
}

signed main() {
    m = read(), d = read();
    build(1, 1, m);
    while (m--) {
        ch = getchar(), que = read();
        if (ch == 'A') modify(1, ++n, (que + t) % d);
        else write(t = que == 0 ? 0 : query(1, std::max(n - que + 1, (long long)1), n)), puts("");
    }
    return 0;
}
破防了,过来求助大佬,玄关

回复

4 条回复,欢迎继续交流。

正在加载回复...