原题链接:新生的入队仪式
解题思路:可以用二分法查找解题,因为二分法查到最后刚好就是要替换的数,直接取他的下标就好
注意事项:最高的话,要单独拿出来解
参考代码:
#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分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复