Cod sursa(job #1854376)

Utilizator ApostolIlieDanielApostol Daniel ApostolIlieDaniel Data 22 ianuarie 2017 17:36:45
Problema Heavy metal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <stdio.h>
#include <algorithm>
struct conc
{ int a; int b;int nr;};
conc v[100001];
using namespace std;
bool cmp ( conc x, conc y) {
    if ( x.b < y.b )
      return 1;
    return 0;
}
int main()
{
  FILE *fin, *fout;
  int n, i, st, dr, o, m;
  fin = fopen ( "heavymetal.in", "r" );
  fout = fopen ( "heavymetal.out", "w" );
  fscanf ( fin, "%d", &n );
  for ( i = 1; i <= n; i++)
    fscanf ( fin, "%d%d", &v[i].a, &v[i].b);
  sort ( v + 1, v + n + 1, cmp);
  for ( i = 1; i <= n; i++) {
    st = 1;
    dr = i - 1;
    o = 0;
    while ( st <= dr )
    {
      m = (st + dr) / 2;
      if ( v[m].b <= v[i].a )
      {
        o = m;
        st = m + 1;
      }
      else
        dr = m - 1;
    }
    if(v[i - 1].nr > v[i].b - v[i].a + v[o].nr)
      v[i].nr = v[i - 1].nr;
    else
      v[i].nr = v[i].b - v[i].a + v[o].nr;
  }
  fprintf ( fout, "%d", v[n].nr);
  fclose ( fin );
  fclose ( fout );
  return 0;
}