Cod sursa(job #1059060)

Utilizator PatrunjelFMIAnita Liviu Patrunjel Data 16 decembrie 2013 03:39:25
Problema Deque Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
//-2166091628382
#include<iostream>
#include<fstream>
using namespace std;

ifstream fin("deque.in");
ofstream fout("deque.out");

struct nod{
    int inf,poz;
    nod *urm,*prec;
};

void adaug_sf(nod *&inc,nod *&sf,int v,int i){
    nod *d=new nod, *s2,*q;

    d->inf=v;
    d->poz=i;
    d->urm=0;

    for(s2=sf; s2 && s2->inf>=v;){
        q=s2;
        s2=s2->prec;
        delete q;
    }

    if(!s2){
        d->prec=0;
        inc=sf=d;
    }
    else{
        if(s2==inc) inc->urm=d;
        d->prec=s2;
        s2->urm=d;
        sf=d;
    }
}

int main(){
    int i,n,k,v;
    nod *inc,*sf,*d,*p;
    long long s=0;

    inc=sf=0;
    fin>>n>>k;
    for(i=1;i<k;i++){
        fin>>v;
        adaug_sf(inc,sf,v,i);
    }
    for(i=k;fin>>v;i++){
        if(inc->poz+k-1 < i){
            d=inc;
            inc=inc->urm;
            inc->prec=0;
            delete d;
        }
        adaug_sf(inc,sf,v,i);
        s+=inc->inf;
    }

    /*cleanup-teste*/
    for(d=inc;d;){
        p=d;
        d=d->urm;
        delete p;
    }
    fout<<s<<endl;
    return 0;
}