Pagini recente » Istoria paginii runda/3probs/clasament | Cod sursa (job #3180225) | Cod sursa (job #2430383) | Romanian IOI Medalists: Careers | Cod sursa (job #1457012)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("deque.in") ;
ofstream fout ("deque.out") ;
int N , K , a [5000010] , deq [5000010] , fata , spate ;
long long sum ;
int main()
{
fin >> N >> K ;
int i ;
for (i = 1; i <= N; i++)
fin >> a[i] ;
fata = 1 , spate = 0; // Initializare, spate < fata => deque-ul este vid
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 ( fata <= spate && a [i] <= a [ deq [ spate ] ] )
-- spate ;
// Adaugam pozitia elementului curent in deque
deq [ ++ spate ] = 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 [ fata ] == i - K )
++ fata ;
// Afisam minimul, acesta aflandu-se in varful deque-ului
if ( i >= K )
sum += a [ deq [ fata ] ] ;
}
fout << sum ;
return 0;
}