Cod sursa(job #799691)

Utilizator harababurelPuscas Sergiu harababurel Data 19 octombrie 2012 20:52:11
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <stack>
#include <deque>
#include <algorithm>
using namespace std;

deque <int> d;
vector <int> v;
int n, k, i, j;
long long sol = 0;
int main() {
    ifstream f("deque.in");
    ofstream g("deque.out");

    f>>n>>k;
    for(i=1; i<=n; i++) {
        f>>j;
        v.push_back(j);
    }

    for(i=0; i<n; i++) {
        while(!d.empty() && v[i] <= v[d.back()]) d.pop_back();   //scot de la capat (ultimele bagate) toate numerele peste cel actual

        d.push_back(i);                                         //il bag pe cel actual

        if(d.front() == i - k) d.pop_front();                    //vad pozitia primului, daca iese din secventa de k, il scot

        if(i>=k-1) sol += v[d.front()];   //daca am ajuns sa am o secventa intreaga, bag minimul (front) in suma
    }

    cout<<sol<<"\n";
    g<<sol<<"\n";

    f.close();
    g.close();
	return 0;
}