#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=1e5;
int n,qu,d[maxn+2],c[maxn+2],val[maxn+2],par[maxn+2];;
vector<int>adj[maxn+2];
int bin[maxn+2][20];
void dfs(int cur,int tot,int p){
par[cur]=p;
val[cur]=tot;
for(auto x : adj[cur]){
dfs(x,tot+c[x],cur);
}
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>qu;
for(int q=1;q<=n;q++){
cin>>d[q]>>c[q];
}
d[n+1]=1e18; c[n+1]=0;
stack<int>st;
st.push(n+1);
for(int q=n;q>=1;q--){
while(st.size() && d[st.top()]<=d[q]){
st.pop();
}
adj[st.top()].push_back(q);
st.push(q);
}
dfs(n+1,0,0);
for(int q=1;q<=n;q++){
bin[q][0]=par[q];
}
for(int q=1;q<20;q++){
for(int w=1;w<=n;w++){
bin[w][q]=bin[bin[w][q-1]][q-1];
}
}
while(qu--){
int r,v;
cin>>r>>v;
if(val[r]<v){
cout<<0<<endl;
continue;
}
if(c[r]>=v){
cout<<r<<endl;
continue;
}
int cur=r;
for(int q=19;q>=0;q--){
if(val[r]-val[bin[bin[cur][q]][0]]<v){
cur=bin[cur][q];
}
}
cur=par[cur];
if(cur==n+1)cur=0;
cout<<cur<<endl;
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |