Pagini recente » Diferente pentru utilizator/teo.serbanescu intre reviziile 7 si 9 | Diferente pentru problema/livada2 intre reviziile 22 si 21 | Atasamentele paginii Profil xkz01 | Diferente pentru utilizator/mocalinno intre reviziile 12 si 36 | Cod sursa (job #2127711)
#include <iostream>
#include <deque>
#include <fstream>
#define nMax 5000003
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
int n, k, v[nMax], dq[nMax], bk, fr;
long long sum = 0;
int main(){
fin>>n>>k;
for(int i = 1; i <= n; i ++){
fin>>v[i];
}
bk = 1, fr = 0;
for(int i = 1; i <= n; i ++){
while(bk <= fr && v[i] <= v[dq[fr]]){
-- fr;
}
dq[++ fr] = i;
if(dq[bk] == i - k){
++ bk;
}
if(i >= k){
sum += v[dq[bk]];
}
}
fout<<sum<<"\n";
return 0;
}