zoukankan      html  css  js  c++  java
  • L2-014. 列车调度

    L2-014. 列车调度

    时间限制
    300 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    陈越

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


    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
    分析:用一个数组模拟轨道,数组长度表示当前轨道数,数组元素表示当前轨道的最后一个元素,所以用反证法可以证明一下数组最后一个元素就是当前所有轨道中的最大元素。
    然后用二分去找数组中大于当前要进入轨道的元素的最小值
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=1e5+5;
     4 int a[maxn];
     5 
     6 //这里有个一定性:就是在数组len-1之前的元素一定都比 a[len-1]小;反证法一下,如果不比a[len-1]小,那a[len-1]大可放到前面去。
     7 //所以a[len-1]一定是当前数组中最小的元素,然后插入K 的时候,直接和len-1比较一下就可以,满足插入条件的话就二分check一下找最接近k
     8 //的并且大于k的位置插入 
     9 int main(){
    10     int n;
    11     cin>>n;
    12     int k, len=0;
    13     while(n--){
    14         cin>>k;
    15         if(len==0||a[len-1]<k){
    16             a[len++]=k;
    17         }else{
    18             int l=0, r=len-1;
    19             while(l<r){
    20                 int mid=l+(r-l)/2;
    21                 if(a[mid]>k)
    22                     r=mid-1;
    23                 else l=mid+1;
    24             }
    25             a[l]=k;
    26         }
    27     }
    28     cout<<len<<endl;
    29     return 0;
    30 } 
  • 相关阅读:
    JAVA规则引擎 -- Drools
    Spring多数据源的配置和使用
    nginx反向代理与正向代理的区别
    优化你的java代码性能
    java 代码优化
    java常用的设计模式
    Java中的异常处理从概念到实例
    详解JVM工作原理和特点
    mysql性能优化-慢查询分析、优化索引和配置
    外网不能访问部署在虚机的NodeJs网站(80端口)
  • 原文地址:https://www.cnblogs.com/ledoc/p/6610716.html
Copyright © 2011-2022 走看看