#include<bits/stdc++.h>
using namespace std;
const int MAXN=100005;
int d[MAXN],c[MAXN],n,q,nxt[MAXN][20];
void pre(int n){
stack<int> st;
for(int i=n;i>=1;i--){
while(!st.empty()&&d[st.top()]<=d[i])st.pop();
nxt[i][0]=st.empty()?0:st.top();
st.push(i);
}
for(int j=1;j<20;j++){
for(int i=1;i<=n;i++){
if(nxt[i][j-1]!=0){nxt[i][j]=nxt[nxt[i][j-1]][j-1];}
else{nxt[i][j]=0;}
}
}
}
int qu(int r,int v){
int cur=r;
while(v>c[cur]){
v-=c[cur];
if(nxt[cur][0]==0)return 0;
for(int j=19;j>=0;j--){
if(nxt[cur][j]!=0&&d[nxt[cur][j]]<=d[r]){cur=nxt[cur][j];}
}
cur=nxt[cur][0];
}
return cur;
}
int main(){
cin>>n>>q;
for(int i=1;i<=n;i++){cin>>d[i]>>c[i];}
pre(n);
for(int i=1;i<=q;i++){
int r,v;cin>>r>>v;
cout<<qu(r,v)<<endl;
}
return 0;
}
提交结果:(https://www.luogu.com.cn/record/201834039)