列车调度(PTA)
调度 PTA 列车
2023-06-13 09:11:59 时间
大家好,又见面了,我是你们的朋友全栈君。
7-11 列车调度 (25 分)
火车站的列车调度铁轨的结构如下图所示。
两端分别是一条入口(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
一维数组 + 二分查找
一维数组模拟各轨道,数组记录当前轨道最小的数,设置全轨道最大值maxn
大于maxn说明当前各个轨道都容不下,轨道数+1,否则二分查找大于当前值的最小数,更新
1 #include <iostream>
2 #include <cstdio>
3 #include <cstring>
4 #include <algorithm>
5 using namespace std;
6
7 int main()
8 {
9 const int N=1e5+5;
10 int tear[N];
11 memset(tear,0,sizeof(tear));
12 int n,x,cnt=0,maxn=0;
13
14 scanf("%d",&n);
15 for(int i=0;i<n;i++){
16 scanf("%d",&x);
17 if(x>maxn){
18 tear[cnt++]=maxn=x;
19 continue;
20 }
21 //二分查找
22 int l=0,r=cnt;
23 while(l!=r){
24 if(tear[(l+r)/2]<x){
25 l=(l+r)/2+1;
26 }
27 else{
28 r=(l+r)/2;
29 }
30 }
31 tear[l]=x;
32 if(l==cnt-1){
33 maxn=x;
34 }
35 }
36 cout<<cnt<<endl;
37 return 0;
38 }
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/154573.html原文链接:https://javaforall.cn
相关文章
- nodeSelector:Pod 定向调度
- 编译过程中的并行性优化(二):基本块与全局代码调度算法
- 【Linux 内核】CFS 调度器 ③ ( 计算进程 “ 虚拟运行时间 “ )
- 【Linux 内核】实时调度类 ④ ( 实时运行队列 rt_rq 源码分析 | 实时运行队列 rt_rq 结构体字段分析 | active、rt_nr_running、curr、next 字段 )
- 【Linux 内核】实时调度类 ⑦ ( 实时调度类核心函数源码分析 | dequeue_task_rt 函数 | 从执行队列中移除进程 )
- vivo 自研Jenkins资源调度系统设计与实践
- Linux内核调度器之精彩(linux调度器)
- 什么是CPU调度,CPU调度完全攻略
- Linux多线程调度优化实践(linux多线程调度)
- 数据库调度Oracle数据库中Job的间隔策略(job间隔oracle)
- Oracle资源调度:令行管理效率(oracle资源计划)
- 灵活高效的Redis调度模型(redis 调度模型)