[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);
}

 

posted @ 2018-03-08 01:35  Elpsywk  阅读(212)  评论(0编辑  收藏  举报