解题思路:可以用二分法查找解题,因为二分法查到最后刚好就是要替换的数,直接取他的下标就好

注意事项:最高的话,要单独拿出来解

参考代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	long long int n,m,mark,j;
	long long int x[200000];
	cin>>n>>m;
	for(int i=0,flag=1;i<n;i++)
	{
		cin>>x[i];
		if(flag&&x[i-1]>x[i])//找到队列最高的人
		{
			mark=i-1;
			flag--;
		}
	}
	int expect;
	cin>>expect;
	if(m>x[mark])//新同学最高的情况
	{
		cout<<mark+2<<endl;
		return 0;
	}
	int high,low,mid;
	if(expect==1)//左边
	{
		high=mark;
		low=0;
		while(low<=high)//左边是从小到大排列
		{
			mid=(low+high)>>1;//二进制一退位,相当于除以二
			if(x[mid]<=m)
			{
				low=mid+1;
			}
			else
			{
				high=mid-1;
			}
		}
	}
	else if(expect==2)//右边
	{
		low=mark;high=n-1;
		while(low<=high)//右边是从大到小排列
		{
			mid=(low+high)>>1;
			if(x[mid]>=m)
			{
				low=mid+1;
			}
			else
			{
				high=mid-1;
			}
		}
	}
	cout<<low+1<<endl;//因为数组下标是从0开始,所以加一
	return 0;
}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论