Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #1466879)
#include <iostream>
#include <fstream>
#include <deque>
using namespace std;
ifstream fin ("deque.in") ;
ofstream fout ("deque.out") ;
int N , K , a [5000010] ;
deque < int > deq ;
long long sum ;
int main()
{
fin >> N >> K ;
int i ;
for ( i = 1 ; i <= N ; ++ i )
fin >> a[i] ;
for ( i = 1 ; i <= N ; ++ i )
{
// Cat timp elementul curent este mai mic decat ultimul element din deque, eliminam pozitia ultimului element din deque
while ( deq.size () && a [i] <= a [ deq.back () ] )
deq.pop_back () ;
// Adaugam pozitia elementului curent in deque
deq.push_back (i) ;
// Daca elementul minim coincide cu cel de pe pozita i-K, ii eliminam pozitia din deque, deoarece acesta nu mai conteaza pentru pasii >= i
if ( deq.front() == i - K )
deq.pop_front () ;
// Afisam minimul, acesta aflandu-se in varful deque-ului
if ( i >= K )
sum += a [ deq.front () ] ;
}
fout << sum ;
return 0;
}