思路
桥以上坐标从小到大排序后,找出下坐标的最长上升子序列长度。
判断直线是否相交的思路很巧妙。
const int N = 5e3 + 7, M = 1e6;
int dp[N];
pii s[N];
int main()
{
IOS;
int n; cin >> n;
for (int i = 0; i < n; i++)
{
cin >> s[i].ft >> s[i].sd;
}
sort(s, s + n);
int ans = 0;
for (int i = 0; i < n; i++)
{
dp[i] = 1;
for (int j = 0; j < i; j++)
if (s[j].sd < s[i].sd && dp[j] + 1 > dp[i])
dp[i] = dp[j] + 1;
ans = max(ans, dp[i]);
}
cout << ans << endl;
return 0;
}