Cod sursa(job #371914)

Utilizator Magnuscont cu nume gresit sau fals Magnus Data 7 decembrie 2009 20:23:51
Problema Orase Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>

int v[50001],aux[50001],v2[50001],aux2[50001];

void inter(int l,int mid,int r)
{
 int i=l,j=mid+1,x=0;
 do
 {
  ++x;
  if (((v[i]<v[j])&&(i<mid+1))||(j>r))
   {
    aux[x]=v[i];
    aux2[x]=v2[i];
    ++i;
   }
  else
   {
    aux[x]=v[j];
    aux2[x]=v2[j];
    ++j;
   }
 }
 while (x<r-l+1);
 for (i=l;i<r+1;i++) {v[i]=aux[i-l+1];v2[i]=aux2[i-l+1];}
}

void merge(int l,int r)
{
 if (l==r) return;
 int mid=((l+r)/2);
 merge(l,mid);
 merge(mid+1,r);
 inter(l,mid,r);
}

int main()
{
 int i,n,min=1000000000,max=0,m;
 freopen("orase.in","r",stdin);
 freopen("orase.out","w",stdout);
 scanf("%d%d",&m,&n);
 for (i=1;i<n+1;i++) scanf("%d%d",&v[i],&v2[i]);
 merge(1,n);
 min=v[1]-v2[1];
 for (i=2;i<n+1;i++)
 {
	if (v2[i]+v[i]-min>max) max=v2[i]+v[i]-min;
	if (v[i]-v2[i]<min) min=v[i]-v2[i];
 }
 printf("%d",max);
 return 0;
}