rt
#include <iostream>
#include <stack>
#include <cstring>
using namespace std;
typedef long long ll;
const ll NR=1e5+5,inf=0x3f3f3f3f;
ll d[NR],c[NR],r,v,b[NR],f[NR][20],vs[NR][20],n,q;
stack<ll> st;
void ddstack()
{
for(ll i=1;i<=n;i++)
{
while(!st.empty()&&d[i]>=d[st.top()])
{
f[st.top()][0]=i;
vs[st.top()][0]=c[i];
st.pop();
}
st.push(i);
}
while(!st.empty())
{
f[st.top()][0]=0;
st.pop();
}
}
ll before_bz()
{
for(ll j=1;(1<<j)<=n;j++)
{
for(ll i=1;i+(1<<j)<=n;i++)
{
f[i][j]=f[f[i][j-1]][j-1];
vs[i][j]=vs[i][j-1]+vs[f[i][j-1]][j-1];
}
}
}
ll bz(ll from,ll val)
{
if(c[from]>=val)
{
return from;
}
val-=c[from];
ll op=18;
while(op>=0)
{
if(f[from][op]!=0&&val>vs[from][op])
{
val-=vs[from][op];
from=f[from][op];
}
op--;
}
return f[from][0];
}
int main()
{
memset(vs,inf,sizeof(vs));
cin>>n>>q;
for(ll i=1;i<=n;i++)
cin>>d[i]>>c[i];
ddstack();
before_bz();
while(q--)
{
cin>>r>>v;
cout<<bz(r,v)<<endl;
}
return 0;
}
本蒟蒻测样例没问题(悲
提交之后全RE
求大佬指点%%%