제출 #431594

#제출 시각아이디문제언어결과실행 시간메모리
431594DaktoFountain (eJOI20_fountain)C++17
100 / 100
1251 ms24804 KiB
#include <bits/stdc++.h>

using namespace std;

int main(){
    int n,q;
    cin>>n>>q;
    vector<long long> d(n+1),c(n+1);
    for(int i=1; i<=n; i++) cin>>d[i]>>c[i];
    vector<int> root(n+1,0), tot(n+1,0);
    vector<vector<int>> jmp(n+1);
    d[0]=c[0]=2*1e9;
    stack<int> s;
    s.push(0);
    for(int i=n; i>0; i--){
        while(d[s.top()]<=d[i]) s.pop();
        root[i]=s.top();
        tot[i]=tot[s.top()]+c[i];
        jmp[i].push_back(root[i]);
        s.push(i);
    }
    for(int i=0; i<log2(2*n); i++){
        jmp[0].push_back(0);
        for(int j=1; j<=n; j++) 
            jmp[j].push_back(jmp[jmp[j][i]][i]);
    }

    for(int i=0; i<q; i++){
        long long r,v;
        cin>>r>>v;
        long long goal=tot[r]-v;
        for(int j=log2(2*n); j>=0; j--){
            if(tot[jmp[r][j]]>goal) r=jmp[r][j];

        }
        cout<<r<<endl;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...