Cod sursa(job #68115)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 26 iunie 2007 15:37:01
Problema Orase Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
FILE*f=fopen("orase.in","r");
FILE*g=fopen("orase.out","w");
long n,m,d[50009],l[50009],dmax=-100, max1, max2, dr1, dr2;
void citire()
{
  int i,j;
  fscanf(f,"%ld %ld",&m,&n);
  for(i=1;i<=n;++i)
     fscanf(f,"%ld %ld",&d[i],&l[i]);
}

void buble()
{ 
  long aux, i, j, ok=0;
  while (ok==0)
    { ok=1;
      for (i=1; i<n; i++)
 	for (j=i+1; j<=n; j++)
  	  if (l[i]>l[j])
	    { aux=l[i]; l[i]=l[j]; l[j]=aux;
	      aux=d[i]; d[i]=d[j]; d[j]=aux;
	      ok=0;
	    }
    }
}	
  
int pozitie(int p, int u)
{ int st, dr;
 int aux;
 st=p;
 dr=u;
 aux=l[p];
 while(st<dr)
 { while(st<dr && l[dr]>=aux) dr--;
  l[st]=l[dr];
  while(st<dr && l[st]<=aux) st++;
  l[dr]=l[st];
  l[st]=aux;
  aux=d[p]; d[dr]=d[st]; d[st]=aux;
 }
 return st;
}
void qsort(int p, int u)
{ int m=pozitie(p, u);
  if(p<m) qsort(p, m-1);
  if(m<u) qsort(m+1, n);
}

void calcul()
{
  int i,j;
  for (j=n; j>=n/2+1; j--)
  for(i=n-1;i>1;i--)
    if(abs(d[i]-d[j])+l[i]+l[j]>dmax) dmax=abs(d[i]-d[j])+l[i]+l[j];
  fprintf(g,"%ld",dmax);
}


int main()
{
  citire();
  qsort(1,n);
  calcul();
  fclose(f);
  fclose(g);
  return 0;
}