Cod sursa(job #963321)

Utilizator nicnic28nichita trita nicnic28 Data 17 iunie 2013 10:03:10
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
/*#include<fstream>
using namespace std;
fstream in("deque.in",ios::in),out("deque.out",ios::out);

const int N=5000001;
int d[N],v[N],n,k,st=1,dr;
long long rez;

void stanga(int i){
    if(i-d[st]==k)
        st++;
}
void dreapta(int i){
    while(st<=dr && v[i]<=v[d[dr]])
        dr--;
}

int main()
{
    in>>n>>k;
    for(int i=1 ; i<=n ; i++){
        in>>v[i];
    }
    int i=1;
    for( ; i<=k ; i++){
        dreapta(i);
        d[++dr]=i;
    }
    rez+=v[d[st]];
    for( ; i<=n ; i++){
        stanga(i);
        dreapta(i);
        d[++dr]=i;
        rez+=v[d[st]];
    }
    out<<rez;
    return 0;
}*/
#include<fstream>

using namespace std;

fstream in ( "deque.in ", ios::in ),
        out( "deque.out", ios::out);
const int N=5000001;
int v[N], d[N], k, st=1, dr, n;
long long s;

void stanga ( int i ){
    if( i-d[st] == k ){
        st++;
    }
}

void dreapta ( int i ){
    while ( st<=dr && v[i]<=v[d[dr]]){
        dr--;
    }
}

int main(){
    in >> n >> k;
    for( int i=1 ; i<=n ; i++){
        in >> v[i];
    }
    int i;
    for( i=1 ; i<=k; i++) {
        dreapta(i);
        d[++dr]=i;


    }
    s+= v[d[st]];

    for( i=k+1; i<=n; i++){

        stanga(i);
        dreapta(i);
        d[++dr]=i;
        s+= v[d[st]];
    }
    out << s;

    return 0;

}