Pagini recente » Cod sursa (job #375782) | Cod sursa (job #3031667) | Cod sursa (job #2402506) | Cod sursa (job #1540197) | Cod sursa (job #401451)
Cod sursa(job #401451)
#include<stdio.h>
int n,k;
struct nod
{
int pos,val;
nod*sc,*pr;
}*q,*p,*ultim,*prim;
void push_back(nod*p)
{
p->pr=ultim;
ultim->sc=p;
ultim=p;
ultim->sc=NULL;
}
void push_front(nod*p)
{
p->sc=prim;
prim->pr=p;
prim=p;
prim->pr=NULL;
}
void pop_back(nod*p)
{
p=ultim;
ultim=ultim->pr;
delete ultim->sc;ultim->sc=0;
}
void pop_front()
{
prim=prim->sc;
delete prim->pr;prim->pr=0;
}
void init(int val,int pos)
{
p=new nod;
p->val=val;
p->pos=pos;
}
int empty()
{
return ultim==prim;
}
void elim()
{
q=prim->sc;
int ok=0;
while(!ok&&q)
{
if(p->val<q->val)
{
ultim=q->pr;
ultim->sc=p;
p->pr=ultim;
ultim=p;
ultim->sc=NULL;
ok=1;
}
q=q->sc;
}
if(!ok)push_back(p);
}
int main()
{
q=new nod;
q->pos=q->val=0;
q->sc=q->pr=NULL;
ultim=prim=q;
FILE*f=fopen("deque.in","r");
fscanf(f,"%d%d",&n,&k);
int i,val,s=0;
for(i=0;i<n;++i)
{
fscanf(f,"%d",&val);
init(val,i);
elim();
if(i>=k-1)
{
s+=prim->sc->val;
if(i-k+1>=prim->sc->pos)pop_front();
}
}
fclose(f);
FILE*g=fopen("deque.out","w");
fprintf(g,"%d\n",s);
fclose(g);
return 0;
}