1. 程式人生 > >pta 5-6 列車排程 (25分)

pta 5-6 列車排程 (25分)

5-6 列車排程 (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

程式碼:從所有的軌道中,找到數和將要入軌道最小同時還要大於它, 的軌道,放在他後面

#include<cstdio>
#include<algorithm>
#include<set>
using namespace std;
int main()
{
    int n, i, num;
    while(~scanf("%d", &n))
    {
        set<int> q;//從小到大排序
        set<int
>
::iterator it; for(i = 0; i < n; i++) { scanf("%d", &num); if(q.upper_bound(num) != q.end())//存在num這個值 { //刪除元素num q.erase(*q.upper_bound(num));//裡面可以是對應元素的地址,也可以是具體元素值 } q.insert(num); } printf
("%d\n", q.size());//輸出軌道條數 } return 0; }