Cod sursa(job #1442558)

Utilizator AplayLazar Laurentiu Aplay Data 25 mai 2015 20:33:33
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <stdio.h>
#include <queue>
#include <vector>
#define NMAX 5000001

using namespace std;

int numere[NMAX];

typedef struct RESULT {
    int position;

    bool operator()(int i, int j) {
        return numere[i] > numere[j];
    }
} RESULT;

priority_queue<int, vector<int>, RESULT> minn;
int n, k;
long long ans;

int getMin(int first) {
    int temp = minn.top();
    while(temp < 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", &numere[i]);
        if(i < k - 1) minn.push(i);
    }
    int first = 0, last = k - 1, minim;
    while(last < n) {
        minn.push(last);
        minim = getMin(first);
        ans += numere[minim];
        ++first;
        ++last;
    }

    printf("%lld", ans);

    return 0;
}