제출 #738642

#제출 시각아이디문제언어결과실행 시간메모리
738642aykhnFountain (eJOI20_fountain)C++14
100 / 100
698 ms36832 KiB
#include <bits/stdc++.h> /* author: aykhn 5/4/2023 */ using namespace std; typedef long long ll; const int oo = INT_MAX; const ll ooo = LONG_MAX; const ll mod = 1e9 + 7; #define OPT ios_base::sync_with_stdio(0); \ cin.tie(0); \ cout.tie(0); #define pii pair<int,int> #define pll pair<ll,ll> #define all(v) v.begin(), v.end() #define mpr make_pair #define pb push_back #define ts to_string #define fi first #define se second #define inf 0x3F3F3F3F #define ins insert #define infll 0x3F3F3F3F3F3F3F3FLL #define bpc __builtin_popcount vector<vector<pll>> table(18, vector<pll> (100001)); int main() { ll n, q; cin >> n >> q; vector<pll> v(n + 1); for (ll i = 1; i <= n; i++) cin >> v[i].fi >> v[i].se; stack<ll> s; vector<ll> next(n + 1); next[n] = 0; for (ll i = n; i > 0; i--) { while (!s.empty() && v[s.top()].fi <= v[i].fi) s.pop(); if (s.empty()) next[i] = 0; else next[i] = s.top(); s.push(i); } v[0].fi = v[0].se = 0; for (ll i = 1; i <= n; i++) { table[0][i].fi = next[i]; table[0][i].se = v[i].se; } for (ll i = 1; i <= 17; i++) { for (ll j = 0; j <= n; j++) { table[i][j].fi = table[i - 1][table[i - 1][j].fi].fi; table[i][j].se = table[i - 1][table[i - 1][j].fi].se + table[i - 1][j].se; } } while (q--) { ll r, x; cin >> r >> x; for (ll i = 17; i >= 0; i--) { if (table[i][r].se < x) { x -= table[i][r].se; r = table[i][r].fi; } } cout << r << endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...