Pagini recente » Cod sursa (job #2806651) | Cod sursa (job #2980874) | Cod sursa (job #2246636) | Cod sursa (job #1814330) | Cod sursa (job #401482)
Cod sursa(job #401482)
#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 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;
}
void elim()
{
q=prim->sc;
int ok=0;
while(!ok&&q)
{
if(p->val<=q->val)
{
ultim=q->pr;
delete ultim->sc;ultim->sc=0;
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;
}