Cod sursa(job #1778700)

Utilizator maryan_lupMarian Lupascu maryan_lup Data 13 octombrie 2016 23:35:54
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <iostream>
#include <fstream>
#define DIMMAX 50000
#define FOR(i, a, b) for(int i = a; i <= b; i++)

using namespace std;

int N, K, A[DIMMAX], deque[DIMMAX], stanga=1, dreapta=1; //deque retine pozitiiile elementelor din A[]
long long int suma;

void citire()
{
    ifstream f("deque.in");
    f >> N >> K;
    FOR(i, 1, N)
    {
        f >> A[i];
    }
    f.close();
}

void afisare()
{
    ofstream g("deque.out");
//    FOR(i, 1, N)
//    {
//        g << deque[i]<< " ";
//    }
    g<<suma;
    g.close();
}

void calcul_suma()
{
    deque[1] = 10000001;
    FOR(i, 1, N)
    {
        while (stanga <= dreapta && A[i] <= A[deque[dreapta]]) dreapta--;
        deque[++dreapta] = i;
        if(deque[stanga] == i-K) stanga++;
        if (i >= K) suma += A[deque[stanga]];
    }
}

int main()
{
    citire();
    calcul_suma();
    afisare();
    return 0;
}