[patl2-014]列车调度
解题关键:由Dilworth定理(最小反链划分 == 最长链)可知最少的下降序列个数就等于整个序列最长上升子序列的长度,此题即转化为求最长上升子序列的长度。
#include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<iostream> #include<cmath> #define INF 0x3f3f3f3f using namespace std; typedef long long ll; ll a[500020],dp[500002]; int main(){ int n; cin>>n; for(int i=0;i<n;i++){ cin>>a[i]; } fill(dp,dp+n,INF); for(ll i=0;i<n;i++){ *lower_bound(dp,dp+n,a[i])=a[i]; } printf("%lld\n",lower_bound(dp,dp+n,INF)-dp); }