Cod sursa(job #121091)

Utilizator iepuras_binarAlexandru B. iepuras_binar Data 7 ianuarie 2008 19:24:14
Problema Orase Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <stdio.h>

int m,n,l[1000001],d[1000001],rez,comp=1;

int partitie(int i,int j) {
	int pivot,aux,k;
	pivot = d[i];
        k = i;
	j++;
	while(1) {
	 do i++; while ( d[k] <= pivot && k <= j);
	 do j--; while ( d[j] > pivot);
		if (d[k] >= d[j]) break;
	   int aux;
 aux = d[i];
d[i] = d[j];
d[j] = aux;
aux = l[i];
l[i] = l[j];
l[j] = aux;
         aux = d[i];
	 d[i] = d[j];
	 d[j] = aux;
}
return j;
} 
 

void sortare(int i,int j) {
  int r;
   if( i < j) 
   {
        r = partitie(i,j);
       sortare( i, r-1);
       sortare( r+1, j);
   }
	
}
void citire() {
   freopen("orase.in","r",stdin);
   freopen("orase.out","w",stdout);
     int i;
     scanf("%d",&m);
     scanf("%d",&n);
     for (i=1; i<=n; i++) {
         scanf("%d",&d[i]);
         scanf("%d",&l[i]);
      }
}  
void rezolvare() {
     int k;
     int i,j,aux;
     sortare(1,n);
              for (  i = 2; i <= n; i++ )
    {
        if ( l[i] + l[comp] + (d[i] - d[comp]) > rez )
            rez = l[i] + l[comp] + (d[i]- d[comp]);

        if ( l[comp] + (m - d[comp]) < l[i] + (m - d[i]) )
            comp = i;
    }
             
               
}                 
int main() {
int i;
    freopen("orase.out","w",stdout);
    citire();
    rezolvare();
    printf("%d",rez);
    return 0;
}