Cod sursa(job #2080235)

Utilizator pistvanPeter Istvan pistvan Data 2 decembrie 2017 17:04:41
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include <fstream>
//#include <iostream>
#define MaxN 5000005

using namespace std;

struct elem
{
    int ert;
    int sorsz;
};

elem dq[MaxN];
int N, K, minm, x, dq_e = 1, dq_v = 0, i=0, j=0;
long long sum = 0;

/*void cout_deque()
{
    cout<<"deque: ";
    for (int k = dq_e;k <= dq_v;k++)
        cout<<dq[k].ert<<' ';
    cout<<'\n';
}*/

int main()
{
    ifstream f("deque.in");
    f>>N>>K;
    while (i<K)
    {
        f>>x;
        if (dq_e > dq_v)
        {
            dq[++dq_v] = {x, i};
        }
        else if (x > dq[dq_v].ert)
        {
            dq[++dq_v] = {x, i};
        }
        else
        {
            while (x <= dq[dq_v].ert && dq_v>=dq_e)
                --dq_v;
            dq[++dq_v] = {x, i};
        }
        ++i;
    }
    minm = dq[dq_e].ert;
    sum += minm;
    ++j;
    while (i<N)
    {
        f>>x;
        if (dq_e > dq_v)
        {
            dq[++dq_v] = {x, i};
        }
        else if (x > dq[dq_v].ert)
        {
            dq[++dq_v] = {x, i};
        }
        else
        {
            while (x <= dq[dq_v].ert && dq_v>=dq_e)
                --dq_v;
            dq[++dq_v] = {x, i};
        }
        if (dq[dq_e].sorsz < j)
            ++dq_e;
        minm = dq[dq_e].ert;
        //cout_deque();
        sum += minm;
        ++i;
        ++j;
    }
    ofstream g("deque.out");
    g<<sum;
}