new file: P7167.cpp
This commit is contained in:
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user