Cod sursa(job #461690)

Utilizator S7012MYPetru Trimbitas S7012MY Data 8 iunie 2010 10:28:38
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <fstream>
#define DM 5000010
using namespace std;

int a[DM],n,k;

class coada {
    public:
    int inc,sfc,deque[DM];
    void adaugare (int);
    inline void sterge () { ++inc; }
    inline void init() { inc=1; sfc=0; }
};

inline void coada::adaugare(int x) {
    deque[++sfc]=x;
}


int main()
{
    long long suma=0;
    int i;
    coada c;
    ifstream f("deque.in");
    ofstream g("deque.out");
    f>>n>>k;
    for(i=1; i<=n; i++) f>>a[i];
    c.init();
    for(i=1; i<=n; i++) {
        while (c.inc<=c.sfc && a[i]<a[c.deque[c.sfc]]) --c.sfc;
        c.adaugare(i);
        if(c.deque[c.inc]==i-k) c.sterge();
        if(i>=k) suma+=a[c.deque[c.inc]];
    }
    g<<suma;
    return 0;
}