From 15279976279fc8d54c55f4456b4782ef6f0a2ca2 Mon Sep 17 00:00:00 2001 From: Ren Baoshuo Date: Sun, 3 Jan 2021 00:11:54 +0800 Subject: [PATCH] =?UTF-8?q?#10127.=20=E3=80=8C=E4=B8=80=E6=9C=AC=E9=80=9A?= =?UTF-8?q?=204.3=20=E7=BB=83=E4=B9=A0=201=E3=80=8D=E6=9C=80=E5=A4=A7?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://loj.ac/s/1004214 --- LibreOJ/10127/10127.cpp | 67 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 LibreOJ/10127/10127.cpp diff --git a/LibreOJ/10127/10127.cpp b/LibreOJ/10127/10127.cpp new file mode 100644 index 00000000..1c4bdd9c --- /dev/null +++ b/LibreOJ/10127/10127.cpp @@ -0,0 +1,67 @@ +#include + +using namespace std; + +struct node { + int l, r, v; + + node() { + l = r = 0; + v = -0x3f3f3f3f; + } + node(int _l, int _r) { + l = _l; + r = _r; + v = -0x3f3f3f3f; + } +} tr[200005 << 2]; +int m, p; +char op; + +void build(int u, int l, int r) { + tr[u] = node(l, r); + if (l == r) return; + int mid = l + r >> 1; + build(u << 1, l, mid); + build(u << 1 | 1, mid + 1, r); +} + +void pushup(int u) { + tr[u].v = max(tr[u << 1].v, tr[u << 1 | 1].v); +} + +int query(int u, int l, int r) { + if (tr[u].l >= l && tr[u].r <= r) return tr[u].v; + int mid = tr[u].l + tr[u].r >> 1; + int v = 0; + if (l <= mid) v = query(u << 1, l, r); + if (r > mid) v = max(v, query(u << 1 | 1, l, r)); + return v; +} + +void modify(int u, int x, int v) { + if (tr[u].l == x && tr[u].r == x) { + tr[u].v = v; + return; + } + int mid = tr[u].l + tr[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 n = 0, x, a = 0; + build(1, 1, m); + while (m--) { + cin >> op >> x; + if (op == 'Q') { + a = query(1, n - x + 1, n); + cout << a << endl; + } else { + modify(1, ++n, (a + x) % p); + } + } + return 0; +} \ No newline at end of file