描述
火车站的列车调度铁轨的结构如下图所示。
两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N
条平行的轨道。每趟列车从入口可以选择任意一条轨道进入,最后从出口离开。在图中有9趟列车,在入口处按照{8,4,2,5,3,9,1,6,7}的顺序排队等待进入。如果要求它们必须按序号递减的顺序从出口离开,则至少需要多少条平行铁轨用于调度?
输入
本题有多组测试数据,对于每组数据,输入第一行给出一个整数N
(2 ≤N
≤100000),下一行给出从1到N
的整数序号的一个重排列。数字间以空格分隔。
输出
对于每组数据,输出在一行中输出可以将输入的列车按序号递减的顺序调离所需要的最少的铁轨条数。
样例输入
9
8 4 2 5 3 9 1 6 7
样例输出
4
思路
#include<vector>
#include<iostream>
using namespace std;
int main()
{
int n;
//使每条轨道火车编号实现降序
while(cin>>n){
vector<int> pre(n),trail(n);
for(int i=0;i<n;i++) cin>>pre[i];
int nums=1;
trail[0]=pre[0];
for(int i=1;i<n;i++){
if(pre[i]>trail[nums-1]) trail[nums++]=pre[i];
else{
for(int j=0;j<nums;j++){
//从前往后遍历,可以使轨道数最小
if(trail[j]>pre[i]){
trail[j]=pre[i];
break;
}
}
}
}
cout << nums<<endl;
}
}