Submission #1262653

#TimeUsernameProblemLanguageResultExecution timeMemory
1262653iordache_Fountain (eJOI20_fountain)C++20
100 / 100
161 ms36008 KiB
#include <bits/stdc++.h> #define pb push_back #define int long long using namespace std; const int N=1e5+5,LOG=20; int d[N],v[N]; int to[N]; int up[N][LOG],sum[N][LOG]; signed main() { ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); int n,q; cin>>n>>q; for(int i=1;i<=n;++i) cin>>d[i]>>v[i]; stack<int> st; for(int i=n;i>=1;--i) { while(!st.empty()&&d[i]>=d[st.top()]) st.pop(); if(!st.empty()) to[i]=st.top(); else to[i]=0; st.push(i); } for(int i=1;i<=n;++i) up[i][0]=to[i],sum[i][0]=v[to[i]]; for(int j=1;j<LOG;++j) { for(int i=1;i<=n;++i) up[i][j]=up[up[i][j-1]][j-1],sum[i][j]=sum[i][j-1]+sum[up[i][j-1]][j-1]; } while(q--) { int poz,val;cin>>poz>>val; if(val<=v[poz]) {cout<<poz<<'\n';continue;} for(int b=LOG-1;b>=0;--b) { if(val>sum[poz][b]-v[up[poz][b]]+v[poz]) { val-=sum[poz][b]-v[up[poz][b]]+v[poz]; poz=up[poz][b]; } } cout<<poz<<'\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...