题目链接:下界 lower_bound(挑战程序设计竞赛) - PapaMelon
题目大意:
找出满足aj≥k条件的最小的i,是不是蒙了?其实就是求第一个满足条件的下标(这么理解瞬间题简单了不少)
思路:
二分
坑点:
第一个满足条件则循环条件应该是<,因为满足条件的不止一个,所以要让l=r
代码(我自己写出来的,啦啦啦):
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
long long int n,k;cin>>n>>k;
long long int a[n];
for(int i=0;i<n;i++)
{
cin>>a[i];
}
//因为本身是递增序列所以无需再排序
int l=0,r=n-1;//注意:l,r和mid都是下标
while(l<r)//下面有解释为什么是<
{
int mid=(l+r)/2;
if(a[mid]>=k)//第一个满足k的必须是<=mid,因为要使l=r
{
r=mid;
}else{
l=mid+1;
}
}
cout<<l<<endl;
return 0;
}
总结:
太快乐了,终于又有一道能完全掌握的题,啦啦啦啦
下面是整道题的分析和运行过程(纯手工,够详细):建议看着上面的代码进行理解