Cod sursa(job #1300245)

Utilizator demetriad-dagpagDavid Demetriad demetriad-dagpag Data 24 decembrie 2014 11:13:30
Problema Orase Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <stdio.h>
#include <stdlib.h>
int d[50001],l[50001],s[50001];
void quicksort(int p,int u)
{
    int pivot,j,i,aux,t;
    if(p<u)
    {
        pivot=d[(p+u)/2];
        i=p;
        j=u;
        while(i<=j)
        {
            while(d[i]<pivot && i<u)
                i++;
            while(d[j]>pivot && j>p)
                j--;
            if(i<=j){
                aux=d[i];
                d[i]=d[j];
                d[j]=aux;
                aux=l[i];
                l[i]=l[j];
                l[j]=aux;
                i++;
                j--;
            }
        }
        if(p<j)
            quicksort(p,j);
        if(i<u)
            quicksort(i,u);
    }
}
int main()
{
    int m,n,i,nr,max;
    freopen("orase.in","r",stdin);
    freopen("orase.out","w",stdout);
    scanf("%d%d",&m,&n);
    for(i=1; i<=n; i++)
        scanf("%d%d",&d[i],&l[i]);
    quicksort(1,n);
    for(i=1; i<=n; i++)
    {
        if(s[i-1]-l[i-1]+d[i]-d[i-1]+l[i]>l[i]+l[i-1]+d[i]-d[i-1])
            nr=s[i-1]-l[i-1]+d[i]-d[i-1]+l[i];
        else
            nr=l[i]+l[i-1]+d[i]-d[i-1];
        s[i]=nr;
    }
    max=0;
    for(i=1; i<=n; i++)
        if(s[i]>max)
            max=s[i];
    printf("%d\n",max);

    return 0;
}