PTA 列车调度

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

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

输入格式:

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

输出格式:

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

输入样例:

9
8 4 2 5 3 9 1 6 7
 

输出样例:

4
ps:这题的意思是8->4->2,因为5>2,所以不能接在2的后面,要另外开一条轨道,5->3,同理9也是这样,1可以接在2或3或9后面,不过要优先第一条,
所以接在2后面,后面6和7也是这样分析的。
这题如果正常遍历,会超时,有一个测试点过不了,因此可以采用二分查找。
 1 #include<stdio.h>
 2 int main()
 3 {
 4     int count=1,i,j,n;
 5     scanf("%d",&n);
 6     int a[n],b[n];
 7     for(i=0;i<n;i++)
 8     {
 9         scanf("%d",&b[i]);
10     }
11     a[0]=b[0];
12     for(i=1;i<n;i++)
13     {
14         if(b[i]>a[count-1])
15         {
16             a[count]=b[i];
17             count++;    
18         } 
19         else 
20         {
21             int l=0, r=count-1;
22             while(l<r){
23                 int mid=l+(r-l)/2;
24                 if(a[mid]>b[i])
25                     r=mid-1;
26                 else l=mid+1;
27             }
28             a[l]=b[i];
29             //printf("%d ",a[l]);
30         }
31     }  
32     printf("%d",count);
33     return 0;
34 }

 


posted @ 2021-04-10 15:58  弈星  阅读(296)  评论(0)    收藏  举报