Cod sursa(job #68701)

Utilizator FlorianFlorian Marcu Florian Data 29 iunie 2007 10:17:59
Problema Orase Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<stdio.h>
#include<stdlib.h>
typedef struct
        {
        long x,y;
        }coord;
coord c[50007],b[50009];
long ii[50007];
long n,m;
FILE*f=fopen("orase.in","r");
FILE*g=fopen("orase.out","w");

void read()
        {
        fscanf(f,"%ld %ld",&m,&n);
        long i;
        for(i=0;i<n;++i)
                {
                fscanf(f,"%ld %ld",&c[i].x,&c[i].y);
                ii[i]=i;
                }
        }
int cmp(const void *a, const void *b)
{
long int x = * (long int *) a, y = * (long int *) b;
if (c[x].x==c[y].x) return c[x].y - c[x].y;
return c[x].x - c[y].x;
}
void sortare()
        {
        qsort(ii,n,sizeof(ii[0]),cmp);
        for(long i=0;i<n;++i) b[i]=c[ii[i]];
        }
void solve()
        {
        long i,max=-1,j,max2;
        b[n]=b[1];
        max2=b[0].y-b[0].x;
        j=0;
        for(i=1;i<n;++i)
                {
                if(b[i].x-b[j].x+b[i].y+b[j].y>max) max=b[i].x-b[j].x+b[i].y+b[j].y;
                if(b[i].y-b[i].x>max2) { max2=b[i].y-b[i].x; j=i;}
               }
         fprintf(g,"%ld",max);
         }
int main()
        {
        read();
        sortare();
        solve();
        return 0;
        }