Cod sursa(job #2718981)

Utilizator stefantagaTaga Stefan stefantaga Data 9 martie 2021 14:10:29
Problema Oo Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.85 kb
#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;
}