Pagini recente » Cod sursa (job #2947900) | Cod sursa (job #1711902) | Istoria paginii runda/oji17 | Cod sursa (job #1453975) | 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;
}