Cod sursa(job #1883991)

Utilizator RaduGiucleaGiuclea Radu RaduGiuclea Data 18 februarie 2017 13:04:37
Problema Heavy metal Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <cstdio>
#include <algorithm>
using namespace std;
struct me{int l;int r;int d;};
me v[100002];
int cmp(me a,me b)
{
  if(a.r<b.r)
    return 1;
  if(a.r==b.r&&a.l<=b.l)
    return 1;
  return 0;
}
int mx(int a,int b)
{
  if(a>b)
    return a;
  return b;
}
int main()
{
    freopen("heavymetal.in","r",stdin);
    freopen("heavymetal.out","w",stdout);
    int n,i,a,b,m,pp;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
      scanf("%d%d",&v[i].l,&v[i].r);
    sort(&v[1],&v[n+1],cmp);
    for(i=1;i<=n;i++)
    {
      a=1;
      b=i-1;
      pp=0;
      while(a<=b)
      {
        m=(a+b)/2;
        if(v[m].r<=v[i].l)
          a=m+1,pp=m;
        else b=m-1;
      }
      v[i].d=mx(v[i-1].d,v[pp].d+v[i].r-v[i].l);
    }
    for(i=1;i<=n;i++)
      printf("%d ",v[i].d);
    return 0;
}