提交时间:2026-06-12 15:10:21

运行 ID: 91150

#include <bits/stdc++.h> using namespace std; int n,mx; struct node{ int st,en,sum; }dp[100010]; bool cmp(node a,node b){ return a.st<b.st; } int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>dp[i].st>>dp[i].en; dp[i].sum=1; } sort(dp+1,dp+n+1,cmp);//排好河左岸的位置 for(int j=1;j<=n;j++){ for(int i=1;i<j;i++){ if(dp[i].en<dp[j].en){ dp[j].sum=max(dp[j].sum,dp[i].sum+1); mx=max(dp[j].sum,mx);//求河右岸的最长上升子序列 } } } cout<<mx; return 0; }