竞赛
考级
枫原万叶
哒烧叶
要在一个有序序列中查找第一个大于 xxx 的数,可以使用二分算法。
AC君
海螺
浅夏.山橘月
废话 这道题目要求我们使用二分写法,所有我们不得不使用我们的大脑构件出二分。 相信很多小伙伴们做过用二分求X在A数组中的哪个位置,但是却不知道如何用二分去做求第一个大于X的数的下标,不过这也很简单,只需要使用你聪明智慧的大脑就可以轻松解决。 写题思路 由于用二分去求第一个大于x的数,所以我们需要想如何定义ans。主要思路:如果a[mid]a[mid]a[mid]大于x,那么这个midmidmid就有可能就是第一个大于x的数的下标,可是我们无法确定,不过我们先用ans保存midmidmid(ans初始化为-1),记得赋值rrr变量;而否则的话,我们就使用常规操作将LLL进行赋值,直到退出while循环后,我们的ans要么是-1,要么是第一个大于x的数,因为我们是实时赋值给ans的,范围逐渐缩小就使ans等于第一个大于等于x的数的下标。 AC CODE 哈哈,比AC君的还6 ^{哈哈,比AC君的还6} 哈哈,比AC君的还6
北辞
XXX
不会c++的staff
#include<bits/stdc++.h> using namespace std; int a[110]; int main(){ int n,x; cin >> n; for(int i = 1;i <= n;i++){ cin >> a[i]; } cin >> x; int ans = -1; int left = 1,right = n; while(left <= right){ int mid = (left + right) / 2; if(a[mid] > x){ ans = mid; right = mid - 1; }else{ left = mid + 1; } } cout << ans; return 0; }
恶龙世纪
#include<bits/stdc++.h> using namespace std; int main(){ int n,a[105],y=-1; cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } int x; cin>>x; cout<<upper_bound(a+1,a+1+n,x)-a; return 0; }
?
#include<bits/stdc++.h> using namespace std; int main(){ int m,n,a[1001]; cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } cin>>m; int l=1,r=n,c=0; while(l<=r){ int mid=(l+r)/2; if(a[mid]>m){ r=mid-1; c=mid; }else{ l=mid+1; } } cout<<c; return 0; }
dhy
四斋臻瞎投
不难,稍微改个条件就可以。
LR400BF-5033