Submission #1122662

#TimeUsernameProblemLanguageResultExecution timeMemory
1122662dreamboyFountain (eJOI20_fountain)C++20
100 / 100
180 ms22224 KiB
#include <bits/stdc++.h> //#include <ext/pb_ds/assoc_container.hpp> using namespace std; //using namespace __gnu_pbds; #define speed ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define russian setlocale(LC_ALL,"Russian_Russia.20866"); #define file freopen("onlyone.in", "r", stdin), freopen("onlyone.out", "w", stdout); #define ll long long #define big __int128 #define ull unsigned long long #define ld long double #define pll pair<ll, ll> #define pli pair<ll, int> #define pii pair<int, int> #define all(s) s.begin(), s.end() #define pb push_back #define ins insert #define sz(x) x.size() #define F first #define S second #define lb lower_bound #define ub upper_bound #define mem(x) memset(x, 0, sizeof(x)) mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const int N = 100010; const int B = 448; const ll mod = 1e9 + 7; const ll P = 263; const ld pi = acos(-1); const ll inf = (ll)1e18; const ll ntr = (ll)-1e18; ll add(ll a, ll b) { if(a + b < 0) return a + b + mod; if(a + b >= mod) return a + b - mod; return a + b; } ll sub(ll a, ll b) { return (a - b + mod) % mod; } ll mul(ll a, ll b) { return a * 1LL * b % mod; } ll binpow(ll a, ll n) { ll res = 1; while(n) { if (n & 1) res = mul(res, a); a = mul(a, a); n >>= 1; } return res; } ll inv(ll x) { return binpow(x, mod - 2); } struct node { int v, w; }; int n, q; int d[N], c[N]; node up[N][25]; void solve() { cin >> n >> q; for(int i = 1; i <= n; i++) { cin >> d[i] >> c[i]; } stack<int> st; st.push(0); d[0] = 1e9 + 1; for(int i = n; i >= 1; i--) { while(!st.empty() && d[i] >= d[st.top()]) st.pop(); up[i][0] = {st.top(), c[i]}; st.push(i); } for(int k = 1; k <= 20; k++) { for(int i = 1; i <= n; i++) { node to = up[i][k - 1]; up[i][k] = {up[to.v][k - 1].v, to.w + up[to.v][k - 1].w}; } } while(q--) { int r, v; cin >> r >> v; for(int k = 20; k >= 0; k--) { if(v > up[r][k].w) { v -= up[r][k].w; r = up[r][k].v; } } cout << r << '\n'; } } signed main() { speed; //file int test = 1; //cin >> test; while(test--) { solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...