找数
这道题目是经典二分只是二分中对于mid的判断变了,可以直接套模板。
1 int l = -1,r =N; 2 while(l+1!=r) 3 { 4 m=(l+r)>>1; 5 if(check(m)) l=m; 6 else r=m; 7 } 8 return l or r;
上代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=1e6; 4 int n,m,a[N]={0}; 5 int main() 6 { 7 cin>>n>>m; 8 for(int i=1;i<=n;i++) scanf("%d",&a[i]); 9 while(m--) 10 { 11 int k; 12 scanf("%d",&k); 13 int r=n,l=1; 14 while(l+1!=r) 15 { 16 int mid=(l+r)/2; 17 if(a[mid]<=k) l=mid; 18 else r=mid; 19 } 20 if(a[l]==k) printf("%d\n",l); 21 else if(a[r]==k) printf("%d\n",r); 22 else printf("0\n"); 23 } 24 return 0; 25 }

浙公网安备 33010602011771号