161562025-04-07 16:50:52algoproSzökőkútcpp17Elfogadva 100/100326ms21652 KiB
// UUID: c8b90712-906c-4dbd-b07f-6643efe5829c
#include <bits/stdc++.h>
using namespace std;
const int c=1e5+10,k=19;
int kov[c][k],ert[c][k],szel[c],kap[c];
int main() {
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	int n,q; cin>>n>>q;
    for(int i=1; i<=n; i++)
        cin>>szel[i]>>kap[i];
    stack<int> s;
    s.push(n+1);
    szel[n+1]=1e9+10;
    for(int i=n; i>0; i--)
    {
        while(szel[s.top()]<=szel[i]) s.pop();
        kov[i][0]=s.top();
        ert[i][0]=kap[i];
        s.push(i);
    }
    for(int j=1; j<k; j++)
        for(int i=1; i<=n; i++)
        {
            kov[i][j]=kov[kov[i][j-1]][j-1];
            ert[i][j]=ert[i][j-1]+ert[kov[i][j-1]][j-1];
        }
    while(q--)
    {
        int kezd,hany; cin>>kezd>>hany;
        for(int i=k-1; i>=0; i--)
        {
            if(kezd==n+1) break;
            if(ert[kezd][i]<hany)
            {
                //cout<<kezd<<" "<<hany<<endl;
                hany-=ert[kezd][i];
                kezd=kov[kezd][i];
                //cout<<kezd<<" "<<hany<<endl;
            }
        }
        cout<<(kezd>n?0:kezd)<<"\n";
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask130/30
1Elfogadva1ms316 KiB
2Elfogadva1ms316 KiB
3Elfogadva2ms564 KiB
4Elfogadva2ms564 KiB
5Elfogadva2ms448 KiB
6Elfogadva2ms564 KiB
7Elfogadva2ms564 KiB
subtask230/30
1Elfogadva174ms19348 KiB
2Elfogadva263ms18228 KiB
subtask340/40
1Elfogadva3ms448 KiB
2Elfogadva96ms11316 KiB
3Elfogadva326ms21652 KiB
4Elfogadva223ms20884 KiB
5Elfogadva164ms20100 KiB
6Elfogadva146ms20312 KiB