제출 #465500

#제출 시각아이디문제언어결과실행 시간메모리
465500Sench2006Fountain (eJOI20_fountain)C++14
0 / 100
211 ms21572 KiB
#include <bits/stdc++.h> #include <unordered_map> using namespace std; #define ll long long #define ar array #define f first #define s second #define mpr make_pair #define pb push_back #define lb lower_bound #define ub upper_bound #define FOR(i, a, b) for(auto i = a; i < b; i++) #define FORD(i, a, b) for(auto i = a - 1; i >= b; i--) #define trav(x, v) for(auto x : v) #define fastio ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); #define fileio freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); // --------------- SOLUTION --------------- // const int MAXN = 1e5+5; int N, Q; int D[MAXN], C[MAXN]; pair<int, int> P[MAXN][25]; vector <pair<int, int>> ST; void solve() { cin >> N >> Q; FOR(i, 0, N) { cin >> D[i] >> C[i]; } FORD(i, N, 0) { while(!ST.empty() && ST.back().f <= D[i]) ST.pop_back(); if (ST.empty()) P[i][0] = {0, C[i]}; else P[i][0] = {ST.back().s, C[i]}; ST.pb({D[i], i}); } FOR(j, 1, 20) { FOR(i, 0, N) { pair<int, int> c = P[P[i][j - 1].f][j - 1]; P[i][j] = {c.f, P[i][j - 1].s + c.s}; } } FOR(i, 0, Q) { int R, V; cin >> R >> V; FORD(i, 20, 0) { if(V > P[R][i].s){ V -= P[R][i].s; R = P[R][i].f; } } cout << R << '\n'; } } int main() { fastio; // fileio; int tests = 1; // cin >> tests; while (tests--) { solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...