Cod sursa(job #433464)

Utilizator Omega91Nicodei Eduard Omega91 Data 3 aprilie 2010 18:43:26
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>
#include <deque>

using namespace std;

class MyDeque : private deque< pair<int, int> > {
    
    public: 
    void add(const int x, const int i) {
        while (!empty() && back().first > x ) pop_back();
        push_back(make_pair(x, i));
    }
    
    int get_min(const int i, const int k) {
        if (i - front().second >= k) pop_front();
        return front().first;
    }
};

int main()
{
    int N, i, x, K;
    long long S = 0;
    MyDeque deq;
    ifstream f1("deque.in");
    ofstream f2("deque.out");
    f1 >> N >> K;
    for (i = 0; i != K; ++i) {
        f1 >> x;
        deq.add(x, i);
    }
    S += deq.get_min(i - 1, K);
    for (; i != N; ++i) {
        f1 >> x;
        deq.add(x, i);
        S += deq.get_min(i, K);
    }
    f2 << S << endl;
    return 0;
}


// front .... back