#include <bits/stdc++.h>
#define ll long long
#define vec vector
#define ss second
#define ff first
#define endl '\n'
#define all(X) X.begin(), X.end()
using namespace std;
void _(){
ll n, q; cin >> n >> q; vec<pair<ll , ll>>a(n + 1);
deque<pair<ll, ll>>dq; const ll lg = 41;
vec<vec<ll>>up(lg, vec<ll>(n + 1)), sm(lg, vec<ll>(n + 1, 0));
for(ll i = 1; i <= n; i++){
cin >> a[i].ff >> a[i].ss;
ll d = a[i].ff;
if(i){
while(!dq.empty() and dq.front().ff < d){
auto [dm, id] = dq.front();
dq.pop_front();
up[0][id] = i, sm[0][id] = a[id].ss;
}
}
dq.push_front({d, i});
}
while(!dq.empty()){
auto [dm , id] = dq.front();
dq.pop_front();
up[0][id] = 0, sm[0][id] = a[id].ss;
}
for(ll i = 1; i < lg; i++){
for(ll j = 1; j <= n; j++){
up[i][j] = up[i - 1][up[i - 1][j]];
sm[i][j] = sm[i - 1][j] + ( up[i - 1][j] ? sm[i - 1][up[i - 1][j]] : 0);
}
}
while(q--){
ll cur, v; cin >> cur >> v;
bool ok = 1;
while(cur and ok and v){
ok = 0;
for(ll i = lg - 1 ; i >= 0 and cur; i--){
if(sm[i][cur] <= v){
v -= sm[i][cur];
if(!v)
for(ll j = 0; j < i; j++)
cur = up[j][cur];
else cur = up[i][cur];
ok = 1; break;
}
}
}
cout << cur << endl;
}
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0); _();
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |