Cod sursa(job #62815)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 24 mai 2007 09:53:21
Problema Lupul Urias si Rau Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<stdio.h>
long int  D[100],A[100],S=0,Mx,n,x,l,i,is;
long int max(long int i)
{   Mx=0;
    while(D[i]>x-l&& i<=n) { if(A[i]>Mx) Mx=A[i]; i++;}
    x-=l;i--;
    return Mx;
}
void swap(long int a,long int b)
{	int aux;
	aux=D[a]; D[a]=D[b]; D[b]=aux;
	aux=A[a]; A[a]=A[b]; A[b]=aux;
  }

int heapdown(long int p, long int k)
 {	if(p>k/2) return 0;
  	is=2*p;
	if(p<k/2) if(D[2*p]>D[2*p+1]) is=2*p+1;
	if(D[p]>D[is]){ swap(p,is); heapdown(is,k);}
	return 0;
   }
int main()
{   FILE *f=fopen("minim.in","r");
    FILE *g=fopen("minim.out","w");
    fscanf(f,"%ld%ld%ld",&n,&x,&l);
    for(i=1;i<=n;i++) fscanf(f,"%ld%ld",&D[i],&A[i]);
    for(i=n/2;i>=1;i--) heapdown(i,n);
    for(i=n;i>=1;i--) { swap(1,i);
			heapdown(1,i-1);
		       }
    for(i=1;i<=n;i++)    {   Mx=0;
                             while(D[i]>x-l&& i<=n) { if(A[i]>Mx) Mx=A[i]; i++;}
                             x-=l;i--; S+=Mx;
                         }                               
    fprintf(g,"%ld",S);
    fcloseall();
    return 0;
}