Pagini recente » Cod sursa (job #2706049) | Cod sursa (job #356890) | Cod sursa (job #851927) | Cod sursa (job #2782856) | Cod sursa (job #401531)
Cod sursa(job #401531)
#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=ultim;
while(q&&p->val<=q->val)
{
q=q->pr;
if(q)
{ultim=q;
delete ultim->sc;ultim->sc=0;}
else ultim=prim;
}
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;
long long s=0;
for(i=0;i<n;++i)
{
fscanf(f,"%d",&val);
init(val,i);
elim();
if(i>=k-1)
{
if(i-k>=prim->sc->pos)pop_front();
s+=prim->sc->val;
}
}
fclose(f);
FILE*g=fopen("deque.out","w");
fprintf(g,"%lld\n",s);
fclose(g);
return 0;
}