Submission #1182292

#TimeUsernameProblemLanguageResultExecution timeMemory
1182292meicrisFountain (eJOI20_fountain)C++17
0 / 100
23 ms13072 KiB
#include <iostream>
#include <vector>
#include <stack>
using namespace std;

int N, Q;
vector<int> D, C;
vector<vector<int>> jump;

void preprocess() {
    vector<int> next(N, -1);
    stack<int> s;
    for (int i = N - 1; i >= 0; --i) {
        while (!s.empty() && D[i] >= D[s.top()]) {
            s.pop();
        }
        if (!s.empty()) next[i] = s.top();
        s.push(i);
    }

    int LOG = 20;
    jump.assign(N, vector<int>(LOG, -1));
    for (int i = 0; i < N; ++i)
        jump[i][0] = next[i];

    for (int j = 1; j < LOG; ++j) {
        for (int i = 0; i < N; ++i) {
            int mid = jump[i][j - 1];
            if (mid != -1)
                jump[i][j] = jump[mid][j - 1];
        }
    }
}

int pour(int idx, int V, int idj, int in) {
    while (true) {
        if (V <= C[idx]) return idx + 1;
        if(jump[in][idj]<0){
            return 0;
        }
        int n=jump[idx][idj];
        V -= C[idx];
        return pour(n,V,idx,in);
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> N >> Q;
    D.resize(N);
    C.resize(N);
    for (int i = 0; i < N; ++i)
        cin >> D[i] >> C[i];

    preprocess();

    while (Q--) {
        int R, V;
        cin >> R >> V;
        cout << pour(R - 1, V, 0, R-1) << '\n';
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...