Cod sursa(job #401531)

Utilizator Cristi09Cristi Cristi09 Data 22 februarie 2010 22:00:05
Problema Deque Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#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;
}