Pagini recente » Cod sursa (job #2805914) | Cod sursa (job #601901) | Cod sursa (job #770217) | Cod sursa (job #996693) | Cod sursa (job #2971121)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("drept.in");
ofstream cout("drept.out");
int n, lung[100005], val_min[200010];
int cb(int v[], int sz, int val)
{
int st = 1, dr = sz, rez = 0;
while(st <= dr)
{
int m = (st + dr) / 2;
if(v[m] < val)
{
rez = m;
st = m + 1;
}
else
{
dr = m - 1;
}
}
return rez;
}
pair<int, int> s[100005];
signed main()
{
cin >> n;
for(int i = 1; i <= n; i++)
{
int L, l;
cin >> L >> l;
s[i] = {L, l};
}
sort(s + 1, s + n + 1, [&](auto x, auto y) { if(x.first == y.first) return x.second > y.second; else return x.first < y.first;});
int n_val_min = 0, pmax = 1;
for(int i = 1; i <= n; i++)
{
int l = s[i].second;
int j0 = cb(val_min, n_val_min, l);
if(j0 == n_val_min)
{
n_val_min++;
}
lung[i] = 1 + j0;
val_min[lung[i]] = l;
if(lung[i] > lung[pmax])
{
pmax = i;
}
}
cout << lung[pmax];
}