From 50b1eff18e04bf488854f4db194bdf28f1d585c0 Mon Sep 17 00:00:00 2001 From: hanyixuanten <105723997+hanyixuanten@users.noreply.github.com> Date: Wed, 12 Aug 2026 21:27:22 +0800 Subject: [PATCH] new file: P7167.cpp --- P7167.cpp | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 P7167.cpp diff --git a/P7167.cpp b/P7167.cpp new file mode 100644 index 0000000..ca4dafa --- /dev/null +++ b/P7167.cpp @@ -0,0 +1,56 @@ +#include +#include +using namespace std; +int n, q; +struct node +{ + int d, c; +} p[100005]; +int nxt[100005][20]; +long long sum[100005][20]; +int main() +{ + scanf("%d%d", &n, &q); + for (int i = 1; i <= n; ++i) + { + scanf("%d%d", &p[i].d, &p[i].c); + sum[i][0] = p[i].c; + } + stack> s; + nxt[n][0] = 0; + s.push({p[n].d, n}); + for (int i = n - 1; i >= 1; --i) + { + while (!s.empty() && s.top().first <= p[i].d) + s.pop(); + if (s.empty()) + nxt[i][0] = 0; + else + nxt[i][0] = s.top().second; + s.push({p[i].d, i}); + } + for (int k = 1; k <= 18; ++k) + { + for (int i = 1; i <= n; ++i) + { + nxt[i][k] = nxt[nxt[i][k - 1]][k - 1]; + sum[i][k] = sum[i][k - 1] + sum[nxt[i][k - 1]][k - 1]; + } + } + while (q--) + { + int r; + long long v; + scanf("%d%lld", &r, &v); + for (int k = 18; k >= 0; --k) + { + if (sum[r][k] < v) + { + v -= sum[r][k]; + r = nxt[r][k]; + } + } + printf("%d\n", r); + } + return 0; +} \ No newline at end of file