Submission #1305895

#TimeUsernameProblemLanguageResultExecution timeMemory
1305895ivano_bozhinovskiFountain (eJOI20_fountain)C++20
100 / 100
362 ms28616 KiB
#include <bits/stdc++.h> using namespace std; #define endl '\n' #define pii pair<int,int> #define pb push_back typedef long long ll; const int maxn=1e5+5; const int maxlog=20; vector<int> adj[maxn],c(maxn); int up[maxn][maxlog],sumup[maxn][maxlog],dep[maxn]; void dfs(int v,int par,int depth) { up[v][0]=par; if(par!=-1)sumup[v][0]=c[par]; dep[v]=depth; for(int i=1;i<maxlog;i++) { if(up[v][i-1]!=-1) { up[v][i]=up[up[v][i-1]][i-1]; sumup[v][i]=sumup[v][i-1]+sumup[up[v][i-1]][i-1]; } else up[v][i]=-1; } for(auto x:adj[v]) { if(x!=par)dfs(x,v,depth+1); } } int qry(int node,int s) { if(c[node]>=s)return node; int ans=c[node]; for(int i=maxlog-1;i>=0;i--) { if(up[node][i]!=-1&&ans+sumup[node][i]<s) { ans+=sumup[node][i]; node=up[node][i]; } } return up[node][0]; } int main() { //freopen("input.txt","r",stdin); int n,q; cin>>n>>q; int d[n+1]; for(int i=1;i<=n;i++)cin>>d[i]>>c[i]; stack<int> st; c[0]=2e9; for(int i=1;i<=n;i++) { while(!st.empty()&&d[st.top()]<d[i]) { //adj[st.top()].push_back(i); adj[i].push_back(st.top()); st.pop(); } st.push(i); } while(!st.empty()) { //adj[st.top()].push_back(0); adj[0].push_back(st.top()); st.pop(); } dfs(0,-1,0); int r,v; for(int i=1;i<=q;i++) { cin>>r>>v; cout<<qry(r,v)<<endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...