Submission #1183684

#TimeUsernameProblemLanguageResultExecution timeMemory
1183684meicrisFountain (eJOI20_fountain)C++17
0 / 100
20 ms24136 KiB
#include<bits/stdc++.h>
using namespace std;
vector<long> dmt,cap;
vector<vector<int>> sgtf,sgtv;
int aux;
long query(long a,long b, long n)
{
    for(int i=18; i>=0; i--){
        if(a==n+1) break;
        if(sgtv[a][i]<b){
            b-=sgtv[a][i];
            a=sgtf[a][i];
        }
    }
    cout<<(a>n?0:a)<<"\n";
    return 0;
}
void solve()
{
    long n,q;
    cin>>n>>q;
    dmt.assign(n+1,1e5+10);
    cap.assign(n+1,1e5+10);
    sgtf.resize(n+1,vector<int> (20,0));
    sgtv.resize(n+1,vector<int> (20,0));
    long a,b;
    for(int i=1; i<=n; i++)
    {
        cin>>a>>b;
        dmt[i]=a,cap[i]=b;
    }
    stack<long> pila;
    pila.push(0);
    for(int i=n; i>=1; i--)
    {
        sgtv[i][0]=cap[i];
        while(dmt[i]>=dmt[pila.top()])
        {
            pila.pop();
        }
        sgtf[i][0]=pila.top();
        pila.push(i);
    }
    for(int j=1; j<20; j++){
        int cont=0;
        for(int i=1; i<n+1; i++)
        {
            int parent=sgtf[i][j-1];
            sgtv[i][j]=sgtv[i][j-1]+sgtv[parent][j-1];
            sgtf[i][j]=sgtf[parent][j-1];
        }
    }
    while(q--)
    {
        cin>>a>>b;
        query(a,b,n);
    }
}
int main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...