Pagini recente » Cod sursa (job #145700) | Cod sursa (job #1644414) | Cod sursa (job #2190090) | Cod sursa (job #240953) | Cod sursa (job #2718981)
#include <bits/stdc++.h>
using namespace std;
ifstream f("oo.in");
ofstream g("oo.out");
deque <int> deq;
int n,i,v[100005],din[100005],maxim;
void caz1()
{
memset(din,0,sizeof(din));
maxim=max(maxim,v[1]+v[n]);
while(!deq.empty())
{
deq.pop_back();
}
for (i=4;i<=n-2;i++)
{
if (deq.empty())
{
din[i]=v[i]+v[i-1];
}
else
{
din[i]=v[i]+v[i-1]+deq.front();
}
maxim=max(maxim,din[i]+v[1]+v[n]);
while (!deq.empty()&&deq.back()<=din[i-2])
{
deq.pop_back();
}
deq.push_back(din[i-2]);
}
}
void caz2()
{
memset(din,0,sizeof(din));
maxim=max(maxim,v[1]+v[2]);
while(!deq.empty())
{
deq.pop_back();
}
for (i=5;i<n-1;i++)
{
if (deq.empty())
{
din[i]=v[i]+v[i-1];
}
else
{
din[i]=v[i]+v[i-1]+deq.front();
}
maxim=max(maxim,din[i]+v[1]+v[2]);
while (!deq.empty()&&deq.back()<=din[i-2])
{
deq.pop_back();
}
deq.push_back(din[i-2]);
}
}
void caz3()
{
memset(din,0,sizeof(din));
maxim=max(maxim,v[2]+v[3]);
while(!deq.empty())
{
deq.pop_back();
}
for (i=6;i<=n;i++)
{
if (deq.empty())
{
din[i]=v[i]+v[i-1];
}
else
{
din[i]=v[i]+v[i-1]+deq.front();
}
maxim=max(maxim,din[i]+v[2]+v[3]);
while (!deq.empty()&&deq.back()<=din[i-2])
{
deq.pop_back();
}
deq.push_back(din[i-2]);
}
}
int main()
{
f>>n;
for (i=1;i<=n;i++)
{
f>>v[i];
}
caz1();
caz2();
caz3();
g<<maxim;
return 0;
}