Cod sursa(job #401482)

Utilizator Cristi09Cristi Cristi09 Data 22 februarie 2010 21:22:11
Problema Deque Scor 25
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 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=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;
}