#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
long long n,q,val,pos,currd;
long long d[100005],v[100005],nextx[100005];
stack<long long> st;
using ll = long long;
const int MAXN = 100000;
const int LOG = 18;
ll upper[MAXN+1][LOG];
ll sum[MAXN+1][LOG];
int main() {
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n>>q;
for(int i = 1 ; i<=n ; i++){
cin>>d[i]>>v[i];
}
for(int i = n ; i>=1 ; i--){
while(st.size()>0 && d[st.top()]<=d[i]){
st.pop();
}
if(st.size()==0)nextx[i] = 0;
else nextx[i] = st.top();
st.push(i);
}
for(int i = 1 ; i<=n ; i++){
upper[i][0] = nextx[i];
sum[i][0] = v[i];
}
for(int k = 1 ; k<=17 ; k++){
for(int i = 1 ; i<=n ; i++){
int p = upper[i][k-1];
if(p==0)upper[i][k] = 0;
else upper[i][k] = upper[p][k-1];
sum[i][k] = sum[i][k-1]+(p == 0 ? 0LL : sum[p][k-1]);
}
}
while(q--){
cin>>pos>>val;
long long curr = pos;
long long rem = val;
for(int k = 17 ; k>=0 ; k--){
if(curr!=0 && upper[curr][k] != 0 && sum[curr][k] < rem){
rem-=sum[curr][k];
curr = upper[curr][k];
}
}
long long answer = 0;
if(curr!=0 && v[curr]>=rem){
answer = curr;
}
else answer = 0;
cout<<answer<<endl;
}
return 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... |