天梯赛 L2 列车调度

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ccDLlyy/article/details/79807897

题目链接:点击打开链接

思路:二分 + 贪心。用一个数组保存当前每条铁轨的最后一个列车的编号(编号递增),每添加进来一个编号为num新列车,二分查找当前每个铁轨上最后一个列车的编号,且是满足小于num的最大值,若找到,用num替换;若找不到,添加一条新铁轨,即把num加到数组最后。

#include <cstdio>
#include <stack>
#include <algorithm>
#include <queue>
using namespace std;
#define INF 0x3f3f3f3f
int ends,q[100010];//q保存当前每条铁轨的最后一个列车的编号(q内部数据是递增的) 
int main(){
	int n,num;
	scanf("%d",&n);
	ends = 0;
	for(int i = 0;i < n;i++){
		scanf("%d",&num);
		int le = 0,rig = ends - 1;
		if(le <= rig){//二分 + 贪心,寻找当前每个铁轨上最后一个列车的编号,且是满足小于num的最大值
			while(le <= rig){
				int mid = (le + rig) / 2;
				if(q[mid] > num){
					rig = mid - 1;
				}
				else{
					le = mid + 1;
				}	
			}
		}
		if(le == ends){
			q[ends++] = num;
		}
		else{
			q[le] = num;
		}
	}
	printf("%d\n",ends);
	return 0;
}


猜你喜欢

转载自blog.csdn.net/ccDLlyy/article/details/79807897