Pagini recente » Cod sursa (job #1809290) | Cod sursa (job #1209242) | Cod sursa (job #3191221) | Cod sursa (job #2251376) | Cod sursa (job #1442555)
#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;
int n, k;
long long ans;
RESULT* getMin(int first) {
RESULT* temp = minn.top();
while(temp->position < first) {
minn.pop();
delete temp;
temp = minn.top();
}
return temp;
}
int main() {
freopen("deque.in", "r", stdin);
freopen("deque.out", "w", stdout);
RESULT* minim, *temp;
scanf("%d%d", &n, &k);
for(int i = 0; i < k - 1; ++i) {
temp = new RESULT;
scanf("%d", &temp->number);
temp->position = i;
minn.push(temp);
}
int first = 0, last = k - 1;
while(last < n) {
temp = new RESULT;
scanf("%d", &temp->number);
temp->position = last;
minn.push(temp);
minim = getMin(first);
ans += minim->number;
++first;
++last;
}
printf("%lld", ans);
return 0;
}