zoukankan      html  css  js  c++  java
  • 列车调度

    Input

      第一行为整数N,表示列车数
      第二行为N个正整数,为1到N的一个排列,表示进站次序

    Output

      输出仅一行一个整数,表示轨道数K的最小值。

    Sample1:

    3
    1 2 3

    Sample2:

    9
    1 3 2 4 8 6 9 5 7

    Sample1:

    3

    Sample2:

    5

    Hint

    【数据范围】
      对于30%的数据,1<=N<=10
      对于70%的数据,1<=N<=2000
      对于100%的数据,1<=N<=100000


    思路

    • 大概就是贪心和二分吧,还能用线段树?
    • 发现每个通道前面的车一定比后面的序号大(先出),现性找一个最小的超时,所以就诞生了二分(鉴于此人二分有误差,所以在二分后右检查了一下)

    代码

    #include <iostream>
    #include <cstdio>
    #define maxn 100005
    using namespace std;
    int cnt,v[maxn],n,a[maxn];
    int main()
    {
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i)
    	{
    		scanf("%d",&a[i]); int flag=0;
    		int l=0,r=cnt,mid=0;
    		while(l<r)
    		{
    			mid=(l+r)>>1;
    			if(v[mid]>a[i]) r=mid;
    			else l=mid+1;
    		}
    		if(v[mid-1]>a[i]) v[mid-1]=a[i];
    		else if(v[mid]>a[i]) v[mid]=a[i];
    		else if(v[mid+1]>a[i]) v[mid+1]=a[i];
    		else v[++cnt]=a[i];
    	}
    	printf("%d
    ",cnt);
    	return 0;
    }
    
  • 相关阅读:
    创建商品APP
    商品模块表结构分析
    sprintf 和 fprintf
    linux中sys目录
    linux中proc目录
    ioctl()函数
    ffmpeg下载安装
    【转】写给小白的实时音视频技术入门提纲
    linux常见目录解释
    linux nfs客户端开启失败解决办法
  • 原文地址:https://www.cnblogs.com/wuwendongxi/p/13380339.html
Copyright © 2011-2022 走看看