Cod sursa(job #1753394)

Utilizator cosmin.pascaruPascaru Cosmin cosmin.pascaru Data 6 septembrie 2016 14:26:36
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include <fstream>

#define NMAX 5000005

using namespace std;

struct Element{
    int value, position;
};

Element deque[NMAX];

int main()
{

    #define USE_FILES

    #ifdef USE_FILES

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

    #define cin fin
    #define cout fout
    #endif // USE_FILES

    int n, k;
    int start = 0, finish = -1;
    long long sum = 0;

    cin >> n >> k;

    for (int i = 0; i < k; ++i){
        int x;
        cin >> x;

        while (start <= finish && deque[finish].value >= x){
            --finish;
        }
        deque[++finish].value = x;
        deque[finish].position = i;
    }

    sum += deque[0].value;

    for (int i = k; i < n; ++i){
        int x;
        cin >> x;

        if (deque[start].position <= i - k) ++start;

        while (start <= finish && deque[finish].value >= x){
            --finish;
        }
        deque[++finish].value = x;
        deque[finish].position = i;

        sum += deque[start].value;
    }

    cout << sum << '\n';
    return 0;
}