zoukankan      html  css  js  c++  java
  • PAT 天梯杯 L2-014 列车调度

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


    Figure

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

    输入格式:

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

    输出格式:

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

    输入样例:

    9
    8 4 2 5 3 9 1 6 7
    

    输出样例:

    4

    开始自己写的程序分没有拿全,有两组时间超限。
    在网上看到别人有set写的,且考虑的比我的优化了很多,在每次刚加进来的时候进行的判断。

    #include<set>
    #include<cmath>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #include<bits/stdc++.h>
    #define maxn 100010
    #define debug(a) cout << #a << ": " << a << endl
    using namespace std;
    int main() {
        int n;
        while( cin >> n ) {
            int t;
            set<int> s;
            s.insert(0);
            for( int i = 0; i < n; i ++ ) {
                cin >> t;  //如果t小于所有队尾最大值,那么删除最大值加入t,即满足了递减
                if( t < *s.rbegin() ) {  //s.rbegin()是当前所有队列队尾的最大值(即集合中的最大值)
                    s.erase(*s.upper_bound(t));  //s.upper_bound(t)返回的是第一个大于t的迭代器的位置,erase删除
                }
                s.insert(t);
            }
            cout << s.size() - 1 << endl;
        }
        return 0;
    }
    彼时当年少,莫负好时光。
  • 相关阅读:
    JavaBean递归拷贝工具类Dozer
    SpringMVC自定义视图Excel视图和PDF视图
    CentOS7使用firewalld打开关闭防火墙与端口[转]
    区分JS中的undefined,null,"",0和false
    环比同比
    JavaScript 浮点数陷阱及解法
    一致性哈希算法(Consistent Hash)的黑科技
    Lua与C交互简明教程
    Twitter-Snowflake,64位自增ID算法详解
    Hystrix使用入门手册(中文)
  • 原文地址:https://www.cnblogs.com/l609929321/p/8597680.html
Copyright © 2011-2022 走看看