Cod sursa(job #1831010)

Utilizator GoogalAbabei Daniel Googal Data 17 decembrie 2016 12:29:17
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <fstream>
#include <deque>
#define nmin -1000000010

using namespace std;

ifstream fin("sum2.in");
ofstream fout("sum2.out");

int n,a,b,x,len;
long long rez=nmin,sum;
deque < int > coada;

inline void solve()
{
    int i;
    fin>>n>>a>>b;
    for(i=1; i<=n; i++)
    {
        fin>>x;
        if(len<a)
        {
            coada.push_front(x);
            len++;
            sum+=x;
            if(len==a && sum>rez)
                rez=sum;
        }
        else if(len>=a && len<b)
        {
            coada.push_front(x);
            len++;
            sum+=x;
            if(sum>rez)
                rez=sum;
        }
        else if(len==b)
        {
            sum-=coada.back();
            coada.pop_back();
            sum+=x;
            coada.push_front(x);
            if(sum>rez)
                rez=sum;
            if(sum<0)
                while(!coada.empty() && sum<0 && len+n-i+1>a)
                {
                    sum-=coada.back();
                    len--;
                    if(len>=a && sum>rez)
                        rez=sum;
                    coada.pop_back();
                }
        }

    }
    while(len>a)
    {
        sum-=coada.back();
        coada.pop_back();
        if(sum>rez)rez=sum;
        len--;
    }
}

int main()
{
    solve();
    fout<<rez;
    return 0;
}