Pagini recente » Cod sursa (job #2144171) | Cod sursa (job #303265) | Cod sursa (job #1945855) | Cod sursa (job #2311095) | Cod sursa (job #1442551)
#include <stdio.h>
#include <queue>
#include <vector>
#define NMAX 5000001
using namespace std;
typedef struct RESULT {
int number;
int position;
bool operator()(RESULT &a, RESULT &b) {
return a.number > b.number;
}
} RESULT;
priority_queue<RESULT, vector<RESULT>, RESULT> minn;
RESULT numbers[NMAX];
int n, k;
long long ans;
RESULT getMin(int first) {
RESULT temp = minn.top();
while(temp.position < first) {
minn.pop();
temp = minn.top();
}
return temp;
}
int main() {
freopen("deque.in", "r", stdin);
freopen("deque.out", "w", stdout);
scanf("%d%d", &n, &k);
for(int i = 0; i < n; ++i) {
scanf("%d", &numbers[i].number);
numbers[i].position = i;
}
for(int i = 0; i < k - 1; ++i) minn.push(numbers[i]);
int first = 0, last = k - 1;
RESULT minim;
while(last < n) {
minn.push(numbers[last]);
minim = getMin(first);
ans += minim.number;
++first;
++last;
}
printf("%lld", ans);
return 0;
}