Cod sursa(job #1316813)

Utilizator valentin11cCraciun Valentin-Gabriel valentin11c Data 14 ianuarie 2015 10:36:04
Problema Deque Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include <fstream>
#include <deque>
#include <algorithm>
using namespace std;
ifstream f("deque.in");
ofstream g("deque.out");
int a[5000005],n,k,minn=10000005;
deque <int> coada;
long long sol=0;
void citire()
{
    f>>n>>k;
    for(int i=1;i<=n;i++) f>>a[i];
}
void solve()
{
    coada.push_front(1);

    for(int i=2;i<=k;i++)
    {
        if(a[i]<=a[coada.back()])
        {

        while(a[i]<=a[coada.back()] && !coada.empty())
        coada.pop_back();

        }
        coada.push_back(i);

    }
    sol+=a[coada.front()];

    //coada.push_back(minn);
   // sort(coada+1,coada+k+1);
   //cout<<a[coada.front()]<<" ";

for(int i=2;i<=n-k+1;i++)
{
    if(a[i-1]==a[coada.front()]) coada.pop_front();

    while(a[i+k-1]<=a[coada.back()]  && !coada.empty())
    {
        coada.pop_back();
    }
    coada.push_back(i+k-1);
    if(coada.front()>=i)
    sol+=a[coada.front()];
    else
    coada.pop_front();
    //cout<<a[coada.front()]<<" ";
}

}
int main()
{
    citire();
    solve();
    g<<sol;
    return 0;
}