Cod sursa(job #70295)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 5 iulie 2007 14:44:05
Problema Orase Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<stdio.h>
long int n,m,d[5001],l[5001],aux,i,delta,delta1,sol,sol1;
int swap(long int i1,long int i2);
int heapdown(long int ic,long int nc);
int main()
{
	FILE *f,*g;
	f=fopen("orase.in","r");
	g=fopen("orase.out","w");
	fscanf(f,"%ld%ld",&m,&n);
	for(i=1;i<=n;i++)
	fscanf(f,"%ld%ld",&d[i],&l[i]);
	for(i=n/2;i>=1;i--)
	heapdown(i,n);
	for(i=n;i>=1;i--)
	{swap(1,i);heapdown(1,i-1);}
	delta=l[1]-d[1];
	for(i=2;i<=n;i++)
	{ sol1=l[i]+d[i]+delta;
	  sol=(sol>sol1)?sol:sol1;
	  delta1=l[i]-d[i];
	  delta=(delta>delta1)?delta:delta1;
	}
	fprintf(g,"%ld\n",sol);
	fcloseall();
	return 0;
}
int swap(long int i1,long int i2)
{
	aux=d[i1];d[i1]=d[i2];d[i2]=aux;
	aux=l[i1];l[i1]=l[i2];l[i2]=aux;
	return 0;
}
int heapdown(long int ic,long int nc)
{
	long int is=2*ic,is1=2*ic+1;
	if(is>nc)return 0;
	if(is<nc) if(d[is1]>d[is]) is=is1;
	if(d[is]>d[ic]){ swap(ic,is);heapdown(is,nc);}
	return 0;
}