Pagini recente » Cod sursa (job #733084) | Cod sursa (job #1243620) | Atasamentele paginii Clasament rhle4myass | Cod sursa (job #1510419) | Cod sursa (job #1442553)
#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;
}