Cod sursa(job #824316)

Utilizator krissu93FMI Tiugan Cristiana Elena krissu93 Data 26 noiembrie 2012 12:38:00
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("deque.in");
ofstream out("deque.out");

struct pereche 
{
	int heap;
	int po;
} v[5000000];
int n,k;
int nr=0;


void schimba (int i,int j)
{
	pereche aux=v[i];
	v[i]=v[j];
	v[j]=aux;
}

void urca(int a)
{
	v[nr].heap=a;
	int i=nr;
	while (v[i].heap<v[i/2].heap && i>1)
	{
		schimba(i,i/2);
		i=i/2;
	}
}

void coboara(int i)
{	
	int fst=2*i;
	int fdr=2*i+1;
	int fbun=i;
	if ( fst<=nr && v[fst].heap<v[fbun].heap) fbun=fst;
	if ( fdr<=nr && v[fdr].heap<v[fbun].heap) fbun=fdr;
	if (fbun!=i)
	{
		schimba(i,fbun);
		coboara(fbun);
	}
}

int main()
{	long long suma=0;
	in>>n>>k;
	int i,a;
	for (i=1;i<=k;i++)
	{
		in>>a;
		v[++nr].po=i;
		urca(a);
	}
	suma+=v[1].heap;
	for (i=k+1;i<=n;i++)
	{
		in>>a;
		v[++nr].po=i;
		urca(a);
		while ( v[1].po<i-k+1 && nr>0 )
		{
			v[1]=v[nr];
			nr--;
			coboara(1);
		}
		suma+=v[1].heap;
	}
	out<<suma;
	return 0;
}