Pagini recente » Istoria paginii utilizator/oblet | Diferente pentru onis-2014/clasament/runda-3 intre reviziile 6 si 5 | Diferente pentru fmi-no-stress-7/solutii intre reviziile 26 si 27 | Monitorul de evaluare | Cod sursa (job #2888894)
#include <fstream>
#include <climits>
#include <iostream>
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
long long minim(const int v[], unsigned int ii, unsigned int sz) {
long long min = LLONG_MAX;
for (; ii < sz; ++ii) {
if (v[ii] < min)
min = v[ii];
}
return min;
}
int main() {
int num;
unsigned int ii, i, j, n, k;
long long sum;
fin >> n >> k;
int v[n], init[n];
for (i = 0; i < n; ++i) {
fin >> num;
init[i] = num;
}
for (i = 0, ii = 0, j = 0; i < k; ++i) {
num = init[i];
if (j == 0) {
v[0] = num;
++j;
} else {
while (v[j - 1] > num)
--j;
v[j] = num;
++j;
}
}
sum = minim(v, ii, j);
for (++ii; i < n; ++i) {
if (init[i - k] == v[ii])
++ii;
num = init[i];
if (ii == j) {
v[j] = num;
++j;
} else {
while (v[j - 1] > num && j > ii) {
--j;
}
v[j] = num;
++j;
}
sum += minim(v, ii, j);
}
fout << sum;
return 0;
}