Pagini recente » Cod sursa (job #680062) | Cod sursa (job #1508022) | Cod sursa (job #219483) | Cod sursa (job #3168872) | Cod sursa (job #2054599)
#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;
}