#include <bits/stdc++.h>
#define all(v) v.begin(), v.end()
using namespace std;
const int sz = 1e5 + 5, inf = 1e9 + 7;
int n, q, dp[20][sz], sg[sz << 2], cost[sz], dist[sz];
array<int, 2> a[sz];
vector<int> v, g[sz];
int get(int ind, int l, int r, int lx, int rx)
{
if(l > rx || r < lx) return n + 1;
if(lx <= l && r <= rx) return sg[ind];
int mid = (l + r) >> 1;
return min(get(ind << 1, l, mid, lx, rx), get(ind << 1 | 1, mid + 1, r, lx, rx));
}
void upd(int ind, int l, int r, int x, int val)
{
if(l == r)
{
sg[ind] = val;
return;
}
int mid = (l + r) >> 1;
if(x <= mid) upd(ind << 1, l, mid, x, val);
else upd(ind << 1 | 1, mid + 1, r, x, val);
sg[ind] = min(sg[ind << 1], sg[ind << 1 | 1]);
}
int id(int i)
{
return upper_bound(all(v), i) - v.begin();
}
void dfs(int v)
{
for(int i : g[v])
{
dist[i] = dist[v] + 1;
cost[i] = cost[v] + a[i][1];
dfs(i);
}
}
void solve()
{
cin >> n >> q;
for(int i = 1; i <= n; i++)
{
upd(1, 1, n, i, n + 1);
cin >> a[i][0] >> a[i][1];
v.push_back(a[i][0]);
}
v.push_back(inf);
sort(all(v));
v.erase(unique(all(v)), v.end());
upd(1, 1, n, v.size(), n + 1);
for(int i = n; i >= 1; i--)
{
int ix = id(a[i][0]);
dp[0][i] = get(1, 1, n, ix + 1, v.size());
g[dp[0][i]].push_back(i);
upd(1, 1, n, ix, i);
}
dp[0][n + 1] = n + 1;
for(int i = 1; i < 20; i++)
{
for(int j = 1; j <= n + 1; j++)
{
dp[i][j] = dp[i - 1][dp[i - 1][j]];
}
}
dfs(n + 1);
while(q--)
{
int R, V;
cin >> R >> V;
if(cost[R] < V)
{
cout << 0 << '\n';
continue;
}
int l = 1, r = dist[R];
while(l <= r)
{
int mid = (l + r) >> 1, u = R;
for(int i = 0; i < 20; i++)
{
if((1 << i) & mid) u = dp[i][u];
}
if(V > cost[R] - cost[u]) l = mid + 1;
else r = mid - 1;
}
int u = R;
--l;
for(int i = 0; i < 20; i++)
{
if((1 << i) & l) u = dp[i][u];
}
cout << u << '\n';
}
}
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int t = 1;
// cin >> t;
while(t--) solve();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |