Pagini recente » Cod sursa (job #1823120) | Cod sursa (job #2353440) | Cod sursa (job #481537) | Cod sursa (job #1389357) | Cod sursa (job #1784336)
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
vector <int> a, t;
int rk, rn;
int minrange(int x, int y) {
int z = a[x];
int i = x;
while (i%rk>0) {
if (z > a[i]) {
z = a[i];
}
i++;
}
while (i+rk<y) {
int j = i/rk;
if (z > t[j]) {
z = t[j];
}
i+=rk;
}
while (i<y) {
if (z > a[i]) {
z = a[i];
}
i++;
}
return z;
}
main() {
ifstream cin("deque.in");
ofstream cout("deque.out");
int K, N;
cin>>N>>K;
a.resize(N);
for (int i = 0; i < N; i++) {
cin>>a[i];
}
rk = ceil(sqrt(K));
rn = ceil(N*1.0/rk);
t.resize(rn);
for (int i = 0; i < a.size(); i++) {
int j = i/rk;
if (i%rk ==0 || t[j] > a[i]) {
t[j] = a[i];
}
}
long long sum = 0;
for (int i = 0; i <= N-K; i++) {
sum += minrange(i, i+K);
}
cout<<sum;
}