Cod sursa(job #1951373)

Utilizator radu.leonardoThe Doctor radu.leonardo Data 3 aprilie 2017 16:22:25
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>
using namespace std;
char pbuf[1<<17], *pp = pbuf, *pep = pp + sizeof(pbuf);
int n,k;
long long s=0;
vector <int> V;
deque <int> DQ;
ifstream f("deque.in");
ofstream g("deque.out");

void adv()
{
    if(++pp == pep) f.read(pp=pbuf, sizeof(pbuf));
}

int _get()
{
    int rez = 0;
    while(*pp < '0' && *pp != '-') adv();
    bool neg = (*pp == '-');
    if(neg) adv();
    while(*pp >= '0') rez = 10 * rez + *pp - '0', adv();

    return neg ? -rez : rez;
}



int main()
{
    f.read(pbuf, sizeof(pbuf));
    n=_get();k=_get();
    for(int i=0; i<k; i++)
    {
        int x;
        x=_get();
        V.push_back(x);
        while( !DQ.empty() && V[DQ.back()]>=x ) DQ.pop_back();
        DQ.push_back(i);
    }

    for(int i=k,st=0; i<n; i++,st++)
    {
        s+=V[DQ.front()];
        int x;
        x=_get();
        V.push_back(x);
        if(DQ.front()==st) DQ.pop_front();
        while( !DQ.empty() && V[DQ.back()]>=x ) DQ.pop_back();
        DQ.push_back(i);
    }
    s+=V[DQ.front()];

    g<<s;

}