Cod sursa(job #3265458)

Utilizator mateistefan11matei stefan mateistefan11 Data 30 decembrie 2024 12:51:02
Problema Heavy metal Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("heavymetal.in");
ofstream fout("heavymetal.out");
struct concert
{
    int x,y,z;
};
bool cmp(concert a, concert b)
{
    return a.y < b.y;
}
concert a[100005];
int dp[100005], n;

int cb(int x, int dr)
{
    int st = 1, mijl, p;
    while(st <= dr)
    {
        mijl = (st + dr) / 2;
        if(x < a[mijl].y)
        {
            dr = mijl - 1;
        }
        else if(x >= a[mijl].y)
        {
            p = mijl;
            st = mijl + 1;
        }
    }
    return p;
}

int main()
{
    int i, j;
    fin >> n;
    for(i = 1; i <= n; i++)
    {
        fin >> a[i].x >> a[i].y;
        a[i].z = a[i].y - a[i].x;
    }
    sort(a + 1, a + n + 1, cmp);
    dp[1] = a[1].z;
    for(i = 2; i <= n; i++)
    {
        j = cb(a[i].x, i - 1);
        dp[i] = max(dp[i - 1], dp[j] + a[i].z);
    }
    fout << dp[n];
    return 0;
}