Cod sursa(job #1780245)

Utilizator SlevySlevoaca Stefan-Gabriel Slevy Data 15 octombrie 2016 22:40:44
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <fstream>
#include <deque>
#define NMAX 5000001
#define BUFF_DIM 100000

using namespace std;

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

deque<int> d;
long long int a[NMAX];
char BUFF[BUFF_DIM];
int pos = 0;

void Read(long long int &a)
{
    int minn = 0;
    while (!isdigit(BUFF[pos]))
    {
        if (BUFF[pos] == '-')
            minn = 1;
        if (++pos == BUFF_DIM)
            in.read(BUFF, BUFF_DIM), pos = 0;
    }
    a = 0;
    while (isdigit(BUFF[pos]))
    {
        a = a * 10 + (BUFF[pos] - '0');
        if (++pos == BUFF_DIM)
            in.read(BUFF, BUFF_DIM),pos = 0;
    }
    if(minn)
        a = -a;
}

int main()
{
    long long int n, k;
    Read(n),Read(k);
    for (int i = 1; i <= n; i++)
        Read(a[i]);
    in.close();
    long long int s = 0;
    for (int i = 1; i <= n; i++)
    {
        while (d.size() > 0 && a[i] <= a[d.back()])
            d.pop_back();
        d.push_back(i);
        if (!d.empty() && d.front() == (i - k))
            d.pop_front();
        if (i >= k)
            s += a[d.front()];
    }
    out << s << "\n";
    out.close();
    return 0;
}