This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |