Cod sursa(job #825262)

Utilizator cristi_berceanuFMI - Cristi Berceanu cristi_berceanu Data 28 noiembrie 2012 01:44:49
Problema Deque Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<cstdio>
#define NMAX 5000004
struct heap{
int val;
int poz;
};
heap v[NMAX];
long long s=0;
int p,m,i,j,n,k;

void urca(int p)
{
	heap aux;
	if(v[p/2].val>v[p].val&&p>1)
	{
		aux=v[p/2];
		v[p/2]=v[p];
		v[p]=aux;
		urca(p/2);
	}
}

void coboara(int p)
{
	int min=p;
	heap aux;
	if(v[min].val>v[2*p].val&&2*p<=n)
		min=2*p;
	
	if(v[min].val>v[2*p+1].val&&2*p<=n)
		min=2*p+1;
	
	if(min!=p)
	{
		aux=v[min];
		v[min]=v[p];
		v[p]=aux;
	}

}

void push(heap p)
{
v[++n]=p;
urca(n);
}

void pop()
{
	
while(v[1].poz+k-1<=p)
{
	v[1]=v[n--];
	coboara(1);
}

}

int main()
{
heap x;
freopen("deque.in","r",stdin);
freopen("deque.out","w",stdout);
scanf("%d%d",&m,&k);
for(p=1;p<=m;p++)
{
scanf("%d",&x.val);
x.poz=p;
push(x);
if(p>=k)
	s+=v[1].val,pop();
}
printf("%d",s);
return 0;
}