7-7 列车调度 (25 分)

火车站的列车调度铁轨的结构如下图所示。



两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N
条平行的轨道。每趟列车从入口可以选择任意一条轨道进入,最后从出口离开。在图中有9趟列车,在入口处按照{8,4,2,5,3,9,1,6,7}的顺序排队等待进入。如果要求它们必须按序号递减的顺序从出口离开,则至少需要多少条平行铁轨用于调度?

输入格式:

输入第一行给出一个整数N (2 ≤ N ≤10​5​​),下一行给出从1到N的整数序号的一个重排列。数字间以空格分隔。

输出格式:

在一行中输出可以将输入的列车按序号递减的顺序调离所需要的最少的铁轨条数。

输入样例:
9 8 4 2 5 3 9 1 6 7
输出样例:
4
类似LIS

代码:
 
#include <map> #include <set> #include <list> #include <cmath> #include
<queue> #include <stack> #include <string> #include <cstdio> #include <vector>
#include <iomanip> #include <cstdlib> #include <cstring> #include <iostream>
#include <algorithm> #define ll long long #define lowbit(x) (x&(-x)) #define
mem(a,b) memset(a,b,sizeof(a)) #define FRER() freopen("in.txt","r",stdin);
#define FREW() freopen("out.txt","w",stdout); using namespace std; const int
maxn = 10000 + 7; int dp[maxn]; int main(){ int n,x,len = 0; scanf("%d",&n);
for(int i=0;i<n;i++){ scanf("%d",&x); if(len==0||dp[len-1]<=x) dp[len++] = x;
else{ int pos = lower_bound(dp, dp+len, x) - dp; dp[pos] = min(dp[pos],x); } }
printf("%d\n",len); }
 

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信