Cod sursa(job #1442555)

Utilizator AplayLazar Laurentiu Aplay Data 25 mai 2015 20:21:36
Problema Deque Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#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;
}