Cod sursa(job #369470)

Utilizator robigiirimias robert robigi Data 28 noiembrie 2009 14:25:26
Problema Orase Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>

using namespace std;

ifstream f ("orase.in");
ofstream g ("orase.out");

long long m, n, v[100000][2], w[100000][2];

void read()
{    f >> m >> n;
     for (int i=1; i<=n; i++)
	 {    f >> v[i][0] >> v[i][1];
	      if (v[i][0]>m) { v[i][0]=0; v[i][1]=0; }
     }
}


void quicksort(int low, int high)
{    long long x=v[(low+high)/2][0];
     int i=low, j=high;
     long long h;
     do
     {
	      while (v[i][0]<x) i++;
	      while (v[j][0]>x) j--;
	      if (i<j)
	      {   h=v[i][0]; v[i][0]=v[j][0]; v[j][0]=h;
	          h=v[i][1]; v[i][1]=v[j][1]; v[j][1]=h;
          }
          i++; j--;
     }while (i<j);
     if (j>low) quicksort(low, j);
     if (i<high) quicksort(i, high);
}

void program()
{    if (n==1) g << 0;
     else 
     {
     long long max1=v[1][1]-v[1][0], max2=-1000000, c=1;
     for (int i=2; i<=n; i++)
     {
         if (v[c][1]+v[i][1]+v[i][0]-v[c][0]>max2) { max2=v[c][1]+v[i][1]+v[i][0]-v[c][0]; }
         if (v[i][1]-v[i][0]>max1) { max1=v[c][1]-v[c][0]; c=i; }
     }
     g << max2;
     }
}


int main()
{   read();
    quicksort(1, n);
    program();

    f.close();
    g.close();
    return 0;
}