Submission #1233019

#TimeUsernameProblemLanguageResultExecution timeMemory
1233019ereringFountain (eJOI20_fountain)C++20
100 / 100
142 ms36704 KiB
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define endl '\n'
#define int long long
const int N=1e5+5,inf=2e9,MOD=1e9+7;
int nxt[N];
pair<int,int> up[N][20];
signed main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    for(int i=0;i<N;i++){
        for(int j=0;j<20;j++)up[i][j]={N-1,inf};
    }
    int n,q; cin>>n>>q;
    int d[n],c[n];
    for(int i=0;i<n;i++){
        cin>>d[i]>>c[i];
    }
    deque<pair<int,int>> dq;
    dq.pb({N-1,inf});
    for(int i=n-1;i>=0;i--){
        while(dq.front().second<=d[i])dq.pop_front();
        nxt[i]=dq.front().first;
        dq.push_front({i,d[i]});
        up[i][0]={nxt[i],c[i]};
        for(int j=1;j<20;j++){
            up[i][j]=up[up[i][j-1].first][j-1];
            up[i][j].second+=up[i][j-1].second;
        }
    }
    while(q--){
        int r,v; cin>>r>>v;
        r--;
        for(int j=19;j>=0;j--){
            if(up[r][j].second<v){
                v-=up[r][j].second;
                r=up[r][j].first;
            }
        }
        cout<<(r==N-1?0:r+1)<<endl;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...