Cod sursa(job #69614)

Utilizator infogodinfo god infogod Data 3 iulie 2007 17:35:45
Problema Orase Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
/*
100 p
*/
#include<stdio.h>

long n,m;
typedef struct
{
  long d, l;
} Oras;

Oras v[50000];

void citire()
{
  freopen("orase.in","r",stdin);
  freopen("orase.out","w",stdout);
  long i;
  scanf("%ld %ld",&m,&n);
  for(i=1;i<=n;++i)
    {
      scanf("%ld %ld",&v[i].d,&v[i].l);
    }

}


int pozitie(int p,int u)
{ int st,dr;
  Oras aux;
  st=p;dr=u;aux=v[p];
  while(st<dr)
  { while(st<dr && v[dr].d>=aux.d) dr--;
    v[st]=v[dr];
    while(st<dr && v[st].d<=aux.d) st++;
    v[dr]=v[st];
  }
  v[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,u);
}

void calcul()
{
  int i, comp;
	   
  qsort(1,n);
  comp=1;
  long smax=0;


  for (i=2; i<=n; i++)
    {
      if ( v[comp].l + (m - v[comp].d) < v[i].l + (m - v[i].d) )
	    comp = i;
	if (v[comp].l + v[i].l + (v[i].d - v[comp].d) > smax) smax=v[comp].l + v[i].l + (v[i].d - v[comp].d);
    }    


  printf("%ld",smax);
}

int main()
{
  citire();
  calcul();
  return 0;
}