Submission #412834

#TimeUsernameProblemLanguageResultExecution timeMemory
412834blueFountain (eJOI20_fountain)C++17
100 / 100
824 ms25452 KiB
#include <iostream> #include <stack> using namespace std; /* */ int main() { int N, Q; cin >> N >> Q; int D[N+2], C[N+2]; for(int i = 1; i <= N; i++) cin >> D[i] >> C[i]; int nxt[N+2][18]; long long vol[N+2][18]; nxt[N+1][0] = N+1; vol[N+1][0] = 2e9; D[N+1] = 2e9 + 1; stack<int> S; S.push(N+1); for(int i = N; i >= 1; i--) { while(D[S.top()] <= D[i]) S.pop(); nxt[i][0] = S.top(); vol[i][0] = C[i]; S.push(i); } // for(int i = 1; i <= N+1; i++) cerr << nxt[i][0] << ' '; // cerr << '\n'; for(int e = 1; e < 18; e++) { for(int i = 1; i <= N+1; i++) { nxt[i][e] = nxt[ nxt[i][e-1] ][e-1]; vol[i][e] = vol[i][e-1] + vol[ nxt[i][e-1] ][e-1]; } } // for(int i = 1; i <= N; i++) // { // cerr << i << ": "; // // for(int e = 0; e < 4; e++) // { // cerr << nxt[i][e] << ' ' << vol[i][e] << " | "; // } // cerr << '\n'; // } for(int q = 1; q <= Q; q++) { long long R, V; cin >> R >> V; for(int e = 17; e >= 0; e--) { // if(e > 5) continue; // cerr << R << ' ' << V << ' ' << vol[R][e] << ' '; if(V > vol[R][e]) { V -= vol[R][e]; R = nxt[R][e]; } // cerr << R << '\n'; } // if(V > 0) R = nxt[R][0]; if(R == N+1) R = 0; cout << R << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...