Cod sursa(job #1442551)

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