Submission #1312502

#TimeUsernameProblemLanguageResultExecution timeMemory
1312502bahaktlFountain (eJOI20_fountain)C++20
100 / 100
259 ms51708 KiB
#include <bits/stdc++.h> #define int long long #define pb push_back using namespace std; const int N=2e5+10; const int inf=9e18; const int mod=1e9+7; pair<int,int>a[N]; int up[N][30]; int sum[N][30]; signed main() { ios_base::sync_with_stdio(NULL); cin.tie(NULL); int T=1; // cin>>T; while(T--) { int n,q; cin>>n>>q; for(int i=0;i<=21;i++) { sum[n+1][i]=inf; } int d[n+1],c[n+1]; d[0]=inf,c[0]=inf; for(int i=1;i<=n;i++) { cin>>d[i]>>c[i]; } stack<int>st; st.push(0); for(int i=n;i>=1;i--) { while(d[i]>=d[st.top()]) { st.pop(); } up[i][0]=st.top(); sum[i][0]=c[st.top()]; st.push(i); } for(int k=1;k<=21;k++) { for(int i=1;i<=n;i++) { up[i][k]=up[up[i][k-1]][k-1]; sum[i][k]=sum[i][k-1]+sum[up[i][k-1]][k-1]; } } while(q--) { int r,v; cin>>r>>v; if(v<=c[r]) { cout<<r<<"\n"; continue; } v-=c[r]; for(int i=21;i>=0;i--) { if(sum[r][i]<v) { v-=sum[r][i]; r=up[r][i]; } } cout<<up[r][0]<<"\n"; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...