Cod sursa(job #829179)

Utilizator vendettaSalajan Razvan vendetta Data 4 decembrie 2012 21:58:49
Problema Deque Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <set>
#include <queue>
#include <deque>

using namespace std;

ifstream f("deque.in");
ofstream g("deque.out");

#define nmax 5000005
#define ll long long

int n, K, a[nmax];
set< pair<int,int> > S;

void citeste(){

    f >> n >> K;
    for(int i=1; i<=n; ++i){
        f >> a[i];
    }

}

void rezolva(){

    // n * log K
    for(int i=1; i<=K; ++i) S.insert( make_pair(a[i], i) );

    ll rez = (ll)(*S.begin()).first;
    //cout << (*S.begin()).first << "\n";
    for(int i=K+1; i<=n; ++i){
        S.insert( make_pair(a[i],i) );
        //acum scot minimele nebune
        for(; (*S.begin()).second+K-1 < i; S.erase(S.begin()));
        //cout << (*S.begin()).first << "\n";
        rez += (ll)(*S.begin()).first;
    }

    cout << rez << "\n";
    g << rez << "\n";

}

int main(){

    citeste();
    rezolva();

    f.close();
    g.close();

    return 0;

}