火車站的列車調度鐵軌的結構以下圖所示。ios
兩端分別是一條入口(Entrance)軌道和一條出口(Exit)軌道,它們之間有N條平行的軌道。每趟列車從入口能夠選擇任意一條軌道進入,最後從出口離開。在圖中有9趟列車,在入口處按照{8,4,2,5,3,9,1,6,7}的順序排隊等待進入。若是要求它們必須按序號遞減的順序從出口離開,則至少須要多少條平行鐵軌用於調度?spa
輸入格式:code
輸入第一行給出一個整數N (2 <= N <= 105),下一行給出從1到N的整數序號的一個重排列。數字間以空格分隔。blog
輸出格式:ci
在一行中輸出能夠將輸入的列車按序號遞減的順序調離所須要的最少的鐵軌條數。string
輸入樣例:it
9 8 4 2 5 3 9 1 6 7
輸出樣例:io
4
//Dilworth定理最小反鏈劃分 == 最長鏈
#include<iostream> #include<vector> #include<cstdio> #include<cstring> #include<queue> #include<set> using namespace std; set<int> S; int main(){ int n, u; cin >> n; while(n --){ cin >> u; if(S.size() && *(S.rbegin()) > u) S.erase(*(S.upper_bound(u))); S.insert(u); } cout << S.size() << endl; }