Cod sursa(job #975459)

Utilizator Daniel3717Aleca Daniel Adrian Daniel3717 Data 20 iulie 2013 12:26:19
Problema Deque Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.93 kb
#include <iostream>
#include <fstream>
using namespace std;
struct nod
{
    nod *urm,*ant;
    int val,ind;
} *prim,*ultim,*p;
int i,n,k,nr;
long long s;
int main(void)
{
    FILE * f;
    f=fopen("deque.in","r");
    ofstream g("deque.out");
    fscanf(f,"%d%d",&n,&k);
    fscanf(f,"%d",&nr);
    p=new(nod);
    p->urm=NULL;
    p->ant=NULL;
    p->val=nr;
    p->ind=1;
    prim=p;
    ultim=p;
    s=0;
    for (i=2;i<k;i++)
    {
        fscanf(f,"%d",&nr);
        while ((ultim->val>nr)&&(ultim!=prim))
        {
            p=ultim;
            ultim=ultim->ant;
            ultim->urm=NULL;
            delete(p);
        }
        if (ultim->val>nr)
        {
            p=ultim;
            prim=new(nod);
            prim->val=nr;
            prim->ind=i;
            prim->urm=NULL;
            prim->ant=NULL;
            ultim=prim;
            delete(p);
        }
        else
        {
            p=new(nod);
            p->val=nr;
            p->ind=i;
            p->urm=NULL;
            p->ant=ultim;
            ultim->urm=p;
            ultim=p;
        }
    }
    for (i=k;i<=n;i++)
    {
        fscanf(f,"%d",&nr);
        if (prim->ind+k<=i)
        {
            p=prim;
            prim=prim->urm;
            delete(p);
        }
        while ((ultim->val>nr)&&(ultim!=prim))
        {
            p=ultim;
            ultim=ultim->ant;
            ultim->urm=NULL;
            delete(p);
        }
        if (ultim->val>nr)
        {
            prim->val=nr;
            prim->ind=i;
            prim->urm=NULL;
            prim->ant=NULL;
            ultim=prim;
        }
        else
        {
            p=new(nod);
            p->val=nr;
            p->ind=i;
            p->urm=NULL;
            p->ant=ultim;
            ultim->urm=p;
            ultim=p;
        }
        s=s+prim->val;
    }
    g<<s;
    g.close();
    return 0;
}