Submission #1307888

#TimeUsernameProblemLanguageResultExecution timeMemory
1307888codereliteCat Exercise (JOI23_ho_t4)C++20
41 / 100
51 ms12436 KiB
#include <bits/stdc++.h> using namespace std; const int N = 200000; int n; int a[N],lc[N],rc[N]; void make_tree(void){ stack<int>st; for(int i=0;i<n;i++){ while(!st.empty()){ int x=st.top(); if(a[x]>a[i])break; lc[i]=x; st.pop(); } if(!st.empty())rc[st.top()]=i; st.push(i); } return; } long long dfs(int k){ long long lcand=0,rcand=0; if(lc[k]>=0)lcand=dfs(lc[k])+(k-lc[k]); //abs(k-lc[k])=k-lc[k] if(rc[k]>=0)rcand=dfs(rc[k])+(rc[k]-k); //abs(k-rc[k])=rc[k]-k return max(lcand,rcand); } int main(void){ int rt=-1; cin>>n; for(int i=0;i<n;i++){ cin>>a[i]; lc[i]=-1, rc[i]=-1; if(a[i]==n)rt=i; } make_tree(); cout << dfs(rt) << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...