Cod sursa(job #1245785)

Utilizator AndreiBarbutaAndrei Barbuta AndreiBarbuta Data 19 octombrie 2014 23:10:28
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>
#include <deque>

#define pb push_back
#define pf pop_front
#define p pop_back

#define IN "deque.in"
#define OUT "deque.out"

const int MAX = 5000114 ;

using namespace std;

ifstream fin ( IN ) ;
ofstream fout ( OUT ) ;

deque < int > dq ;

int v [ MAX ] ;

int main()
{
    int n , k ;
    long long sol = 0 ;
    fin >> n >> k ;
    for ( register int i = 1 ; i <= n ; ++ i )
        fin >> v [ i ] ;
    for ( register int i = 1 ; i <= n ; ++ i ){
        while ( !dq.empty (  ) and v [ i ] <= v [ dq.back (  ) ] )
            dq.p (  ) ;
        if ( !dq.empty (  ) and i - k == dq.front (  ) )
            dq.pf (  ) ;
        dq.pb ( i ) ;
        if ( i >= k )
            sol = sol + v [ dq.front (  ) ] ;
    }
    fout << sol ;
    return 0;
}