제출 #1312488

#제출 시각아이디문제언어결과실행 시간메모리
1312488kkkkkFountain (eJOI20_fountain)C++20
100 / 100
228 ms32052 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int N = 1e5 + 11;
const int inf = 1e9 + 1;
int d[N], c[N], up[N][18], sum[N][18];

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr); cout.tie(nullptr);

    int n, q;
    cin >> n >> q;
    for(int i = 1; i <= n; i++){
        cin >> d[i] >> c[i];
    }
    stack < int > st;
    st.push(0);
    d[0] = inf, c[0] = inf;
    for(int i = n; i >= 1; i--){
        while(d[st.top()] <= d[i]) st.pop();
        up[i][0] = st.top();
        sum[i][0] = c[i];
        st.push(i);
    }
    for(int v = n; v >= 1; v--){
        for(int i = 1; i <= 17; i++){
            up[v][i] = up[up[v][i - 1]][i - 1];
            sum[v][i] = sum[v][i - 1] + sum[up[v][i - 1]][i - 1];
        }
    }
    while(q--){
        int r, v;
        cin >> r >> v;
        for(int i = 17; i >= 0; i--){
            if(sum[r][i] < v){
                v -= sum[r][i];
                r = up[r][i];
            }
        }
        cout << r << '\n';
    }
}
// subete no mono no owari wa sugu ni yattekuru
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...