该怎么用二分查找啊,菜鸟求助

P1918 保龄球

```cpp #include<bits/stdc++.h> using namespace std; long long n,m,k; struct node{//结构体,数本身和序号 int x,y; }a[100001]; bool cmp(node x,node y){ return x.x<y.x; } int main() { cin>>n; for(int i=1; i<=n; i++) { cin>>a[i].x; a[i].y=i; } sort(a+1,a+n+1,cmp);//排序 cin>>m; while(m--) { int f=0;//判断 long long l=1,r=n,mid; cin>>k; while(l<=r) {//二分 mid=(l+r)/2; if(a[mid].x==k) {//找到答案 cout<<a[mid].y<<endl;//输出 f=1; break; } if(a[mid].x<k) {//小了 l=mid+1;//左端点右移 } else if(a[mid].x>k) {//大了 r=mid-1;//右端点左移 } } if(f==0) {//没有答案 cout<<0<<endl; } } return 0; } ```
by xiaoyunhao @ 2024-04-11 17:18:56


@[fangmiaoxin](/user/1141719)
by xiaoyunhao @ 2024-04-11 17:20:45


|