Cod sursa(job #2033662)

Utilizator cosmindascaluDascalu Cosmin cosmindascalu Data 7 octombrie 2017 09:45:08
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#include <deque>

using namespace std;

deque<int> q;
int a[5000003], n, k;

int main()
{
    long long Sum = 0;
    ifstream fin ("deque.in");
    ofstream fout ("deque.out");
    fin >> n >> k;
    for(int i = 1; i <= n; i++)
        fin >> a[i];

    /// Prelucrez primele k - elemente;
    for(int i = 1; i <= k; i++)
    {
        int x = a[i];

        /// Scot din q toate elementele mai mare sau egale cu x.
        while(!q.empty() && x <= a[q.back()])
            q.pop_back();
        q.push_back(i);
    }
    Sum += a[q.front()];

    /// Restul elementelor:
    for(int i = k + 1; i <= n; i++)
    {
        int x = a[i];
        while(!q.empty() && x <= a[q.back()])
            q.pop_back();
        q.push_back(i);

        /// Verific daca s-a invechit un element.
        if (i - q.front() >= k)
            q.pop_front();
        Sum += a[q.front()];
    }
    fout << Sum << " ";
    return 0;
}