二分查找,样例都对,二分的细节哪里错了

P1918 保龄球

把r=n-1改成r=n就对了 你是从1到n寻找 不是1到n-1
by fafdddb @ 2022-06-24 17:35:17


```cpp #include<bits/stdc++.h> using namespace std; #define ll long long const int N=1e5+10; int n,m,ans; struct ty { int pos;//下标 int ans;//数量 }a[N]; int binary_search(ty a[],int t) { int l=1; int r=n;//n个数的意思 while(l<=r) { int mid=l+(r-l)/2; if(a[mid].ans > t) r=mid-1; else if(a[mid].ans < t) l=mid+1; else if(a[mid].ans ==t) return a[mid].pos; } if (l >=n || a[l].ans != t) //退出条件 return 0; return a[l].pos; } bool cmp(ty a,ty b) { return a.ans < b.ans; } int main() { cin>>n; for(int i=1;i<=n;i++) { cin>>a[i].ans; a[i].pos=i; } sort(a+1,a+1+n,cmp); cin>>m; while(m--) { int t; cin>>t; cout<<binary_search(a,t)<<endl; } return 0; } ```
by fafdddb @ 2022-06-24 17:38:28


|