Cod sursa(job #2054599)

Utilizator maria_sinteaMaria Sintea maria_sintea Data 2 noiembrie 2017 10:07:31
Problema Heavy metal Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <iostream>
#include <cstdio>
#include <algorithm>
#define N 100005

using namespace std;

int n, din[N];
struct timp
{
    int st, fin, dur;
}a[N];

void citire()
{
    scanf("%d\n", &n);
    for(int i=1;i<=n;i++)
        scanf("%d %d\n", &a[i].st, &a[i].fin), a[i].dur=a[i].fin-a[i].st;
}

int caut(int st, int dr, int x)
{
    if(st<dr)
    {
        int mij=(st+dr+1)/2;
        if(x>=a[mij].fin)
            return caut(mij, dr, x);
        return caut(st, mij-1, x);
    }
    return st;
}

void calcul()
{
    for(int i=1;i<=n;i++)
    {
        din[i]=din[i-1];
        int poz=caut(0, i, a[i].st);
        int nou=din[poz]+a[i].dur;
        if(din[i]<nou)
            din[i]=nou;
    }
}

int comp(timp a, timp b)
{
    return a.fin<b.fin;
}

int main()
{
    freopen("heavymetal.in", "r", stdin);
    freopen("heavymetal.out", "w", stdout);

    citire();
    sort(a+1, a+n+1, comp);
    calcul();
    for(int i=1;i<=n;i++)
        printf("%d ", din[i]);
    return 0;
}