new file: P7167.cpp

This commit is contained in:
hanyixuanten
2026-08-12 21:27:22 +08:00
parent d4a6ba9dcb
commit 50b1eff18e
+56
View File
@@ -0,0 +1,56 @@
#include <cstdio>
#include <stack>
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<pair<int, int>> 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;
}