Submission #520209

#TimeUsernameProblemLanguageResultExecution timeMemory
520209aris12345678Fountain (eJOI20_fountain)C++14
100 / 100
339 ms29712 KiB
#include <bits/stdc++.h>
using namespace std;

typedef pair<int, int> pii;
#define X first
#define Y second
const int mxN = 1e5+5;
const int mxL = 30;
int up[mxN][mxL], sum[mxN][mxL];

int main() {
    int n, q;
    scanf("%d %d", &n, &q);
    vector<int> d(n+1);
    vector<int> c(n+1);
    stack<pii> st;
    for(int i = 1; i <= n; i++) {
        scanf("%d %d", &d[i], &c[i]);
        while(!st.empty() && d[i] > st.top().X) {
            up[st.top().Y][0] = i;
            sum[st.top().Y][0] = c[st.top().Y];
            st.pop();
        }
        st.push({d[i], i});
    }
    while(!st.empty()) {
        up[st.top().Y][0] = 0;
        sum[st.top().Y][0] = c[st.top().Y];
        st.pop();
    }
    for(int j = 1; j < mxL; j++) {
        for(int i = 0; i <= n; i++) {
            up[i][j] = up[up[i][j-1]][j-1];
            sum[i][j] = sum[i][j-1]+sum[up[i][j-1]][j-1];
        }
    }
    while(q--) {
        int r, v;
        scanf("%d %d", &r, &v);
        for(int i = mxL-1; i >= 0; i--) {
            // cout << r << " " << i << " " << sum[r][i] << " " << v << "\n";
            if(sum[r][i] < v) {
                v -= sum[r][i];
                r = up[r][i];
            }
        }
        printf("%d\n", r);
    }
    return 0;
}

Compilation message (stderr)

fountain.cpp: In function 'int main()':
fountain.cpp:13:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   13 |     scanf("%d %d", &n, &q);
      |     ~~~~~^~~~~~~~~~~~~~~~~
fountain.cpp:18:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   18 |         scanf("%d %d", &d[i], &c[i]);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~
fountain.cpp:39:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   39 |         scanf("%d %d", &r, &v);
      |         ~~~~~^~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...