Pagini recente » Cod sursa (job #1014007) | Cod sursa (job #453154) | Cod sursa (job #954894) | Cod sursa (job #359674) | Cod sursa (job #2718972)
#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[n-1]+v[n]);
while(!deq.empty())
{
deq.pop_back();
}
for (i=3;i<=n-3;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[n-1]+v[n]);
while (!deq.empty()&&deq.back()<din[i-2])
{
deq.pop_back();
}
deq.push_back(din[i-2]);
}
}
void caz4()
{
memset(din,0,sizeof(din));
while(!deq.empty())
{
deq.pop_back();
}
for (i=3;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]);
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();
caz4();
g<<maxim;
return 0;
}