Submission #908202

#TimeUsernameProblemLanguageResultExecution timeMemory
908202arashMLGTriple Jump (JOI19_jumps)C++17
27 / 100
104 ms75456 KiB
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pii; typedef pair<ll,ll> pll; const int N = 5e5 + 23; const ll inf = 1e18; #define F first #define S second #define pb push_back #define sz(x) ((int)x.size()) #define kill(x) cout<<x , exit(0); #define all(x) x.begin(),x.end() #define lc (v<<1) #define rc ((v<<1)|1) #define debug(x) cerr<< #x << " : " << x << '\n'; #define int ll struct Seg { int t[N<<2]; Seg() { fill(t,t+(N<<2),0); } void clear() { fill(t,t+(N<<2),0); } void upd(int pos,int x,int v=1,int tl=1,int tr= N) { if(tr-tl==1) { t[v] = max(t[v],x); return; } int mid=(tl+tr)/2; if(pos<mid) upd(pos,x,lc,tl,mid); else upd(pos,x,rc,mid,tr); t[v] = max(t[lc],t[rc]); } int get(int l,int r,int v=1,int tl=1,int tr= N) { if(l > r) return 0; if(l == tl && r == tr-1) return t[v]; int mid=(tl + tr)/2; return max(get(l,min(mid-1,r),lc,tl,mid) , get(max(l,mid),r,rc,mid,tr)); } }seg,mx; int n,q; int a[N]; vector<pair<int,int>> Q[N]; vector<pair<int,int>> here[N]; int ans[N]; vector<int> st; int L[N],R[N]; vector<pair<int,int> > edges; int Mx[N]; int32_t main() { cin>>n; for(int i = 1; i<= n ; i ++) { cin>>a[i]; mx.upd(i,a[i]); } cin>>q; st.pb(0); for(int i = 1; i<= n ; i++) { while(st.back() && a[st.back()] < a[i]) st.pop_back(); if(sz(st) > 1) { L[i] = st.back(); } st.pb(i); } st.clear(); st.pb(0); for(int i = n ; i >= 1;i --) { while(st.back() && a[st.back()] < a[i]) st.pop_back(); if(sz(st) > 1) { R[i]= st.back(); } st.pb(i); } for(int i= 1; i <= n ; i ++) { if(R[i] != 0 && R[i] - i + R[i] <= n) { Mx[R[i]-i+R[i]] = max(Mx[R[i]-i +R[i]], a[i] + a[R[i]]); } if(L[i] != 0 && i-L[i] + i <= n) { Mx[i-L[i]+i] = max(Mx[i-L[i]+i],a[i] + a[L[i]]); } } int ans= 0; for(int i = 1; i<= n ; i ++) { Mx[i] = max(Mx[i],Mx[i-1]); ans = max(ans,a[i] + Mx[i]); } cout<<ans<< '\n'; 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...