Submission #824127

#TimeUsernameProblemLanguageResultExecution timeMemory
824127vanicFountain (eJOI20_fountain)C++14
100 / 100
133 ms20040 KiB
#include <iostream> #include <algorithm> #include <stack> using namespace std; const int maxn=1e5+5, Log=17; int parent[maxn][Log]; int val[maxn][Log]; int d[maxn]; stack < pair < int, int > > s; int n, q; int solve(int x, int v){ for(int i=Log-1; i>-1; i--){ if(val[x][i]<v){ v-=val[x][i]; x=parent[x][i]; } } return x; } void precompute(){ for(int i=1; i<Log; i++){ for(int j=0; j<=n; j++){ parent[j][i]=parent[parent[j][i-1]][i-1]; if(parent[j][i]!=parent[j][i-1]){ val[j][i]=val[j][i-1]+val[parent[j][i-1]][i-1]; } else{ val[j][i]=val[j][i-1]; } } } } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> q; for(int i=0; i<n; i++){ cin >> d[i] >> val[i][0]; } val[n][0]=1e9; parent[n][0]=n; s.push({2e9, n}); for(int i=n-1; i>-1; i--){ while(s.top().first<=d[i]){ s.pop(); } parent[i][0]=s.top().second; s.push({d[i], i}); } precompute(); int sol; int r, v; for(int i=0; i<q; i++){ cin >> r >> v; sol=solve(r-1, v); cout << (sol+1)%(n+1) << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...