Cod sursa(job #337349)

Utilizator ZethpixZethpix Zethpix Data 3 august 2009 14:24:06
Problema Orase Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <stdio.h>
long m,n,i,d[50002],l[50002];
void inter(long x,long m,long y){
	long a[50002],b[50002];
	for(i=x;i<=y;i++){a[i]=d[i];b[i]=l[i];}
	long i1=x;
	long i2=m+1;
	long k=x-1;
	while(i1<=m&&i2<=y)
		if(a[i1]<a[i2]){
			d[++k]=a[i1++];
			l[k]=b[i1-1];	
		}
		else{
			d[++k]=a[i2++];
			l[k]=b[i2-1];
		}
	for(i=i1;i<=m;i++){
		d[++k]=a[i];
		l[k]=b[i];
		}
	for(i=i2;i<=y;i++){
		d[++k]=a[i];
		l[k]=b[i];
	}
}
void sort(long x,long y){
	if(x!=y){
		long m=(x+y)/2;
		sort(x,m);
		sort(m+1,y);
		inter(x,m,y);
	}
}
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]);
	sort(1,n);
	long max=l[2]+d[2]+l[1]-d[1];
	long mj=1;
	for(i=3;i<=n;i++){
		long m1=l[i]+d[i]+l[i-1]-d[i-1];
		long m2=l[i]+d[i]+l[mj]-d[mj];
		if(m1>max){
			max=m1;
			mj=i-1;
		}
		else
		if(m2>max)
			max=m2;
		else
		if(m1>m2) mj=i-1;
	}
	fprintf(g,"%ld\n",max);
	fclose(f);
	fclose(g);
	return 0;
}