Submission #1275490

#TimeUsernameProblemLanguageResultExecution timeMemory
1275490raditya_noorFountain (eJOI20_fountain)C++20
100 / 100
350 ms26656 KiB
#include <bits/stdc++.h> #define sz size #define em empty #define psb push_back #define ppb pop_back #define ps push #define pp pop #define tp top #define fr first #define sc second #define ll long long using namespace std; int const MAX_N = 1e5, MAX_Q = 2e5; vector <pair <ll, int>> pf; vector <pair <ll, int>> rv[MAX_N + 1]; ll d[MAX_N + 1] = {0}, c[MAX_N + 1] = {0}; vector <int> gr[MAX_N + 1]; int ans[MAX_Q + 1] = {0}; void dfs(int u){ ll before = 0; if(!pf.em()) before = (*pf.rbegin()).fr; pf.psb({c[u] + before, u}); //do queries ll peak = (*pf.rbegin()).fr; for(auto [x, y] : rv[u]){ // cout << y << ' '; //binser int l = 0, r = pf.sz() - 1, cum; while(l <= r){ int mid = (l + r) / 2; if(peak - pf[mid].fr < x){ cum = pf[mid].sc; r = mid - 1; }else{ l = mid + 1; } } ans[y] = cum; } //iterate over next path for(auto v : gr[u]){ dfs(v); } pf.ppb(); } int main(){ //input int n, q; cin >> n >> q; for(int i = 1; i <= n; i++) cin >> d[i] >> c[i]; //graph stack <pair <ll, int>> st; st.ps({d[1], 1}); for(int i = 2; i <= n; i++){ while(!st.em() && st.tp().fr < d[i]){ gr[i].psb(st.tp().sc); st.pp(); } st.ps({d[i], i}); } while(!st.em()){ gr[0].psb(st.tp().sc); st.pp(); } // for(int i = 0; i <= n; i++){ // cout << i << ": "; for(auto v : gr[i]) cout << v << ' '; cout << '\n'; // } //input queries per node for(int i = 1, r; i <= q; i++){ ll v; cin >> r >> v; rv[r].psb({v, i}); } //dfs dfs(0); for(int i = 1; i <= q; i++) cout << ans[i] << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...