ConstStar
发布于 2023-05-05 / 35 阅读 / 0 评论 / 0 点赞

算法题:列车调度

问题描述

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

输入格式

第 1 行给出 1 个正整数 N,2≤N≤105

第 2 行给出从 1∼N 的正整数序号的一个重排列,数字间以一个空格分隔。

输出格式

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

样例

输入

9
8 4 2 5 3 9 1 6 7

输出

4

解决方案

思路

set集合

代码

#include <iostream>
#include <set>

using namespace std;

int main() {

    int n;
    cin >> n;

    set<int> s;
    for (int i = 0; i < n; ++i) {
        int t;
        cin >> t;

        auto it = s.upper_bound(t);
        if (it != s.end()) {
            s.erase(it);
        }
        s.insert(t);
    }

    cout << s.size();

    return 0;
}

评论