7.25 二分查找模板

  今天为大家整理一类经典题目——二分问题,这类问题在普及提高组竞赛中经常出现,而且经常作为难点出现,所以同学们要在刚开始接触的时候就要打好基础,熟练运用模板,在以后的竞赛中才能做到手到擒来。

题目描述

题解代码:

#include<iostream>
#include<string>
using namespace std;
int n,m;
//找出小于等于该值的最大值
long long a[100005],b[50005];
/*
bool binary_search(long long value){
 int l=0,r=n-1;
 while(l<r){
  int mid=(l+r+1)/2;
  if(a[mid]<=value){
   l=mid;
  }
  else{
   r=mid-1;
  }
 }
 if(a[l]==value)
 {
  return true;
 }
 return false;
}
*/
//找出大于等于的最小值
bool binary_search(long long value){
 int l=0,r=n-1;
 while(l<r){
  int mid=(l+r)/2;
  if(a[mid]>=value){
   r=mid;
  }
  else{
   l=mid+1;
  }
 }
 if(a[r]==value){
  return true;
 }
 return false;
}
int main(){
 scanf("%d",&n);
 for(int i=0;i<n;i++){
  scanf("%lld",&a[i]);
 }
 scanf("%d",&m);
 for(int i=0;i<m;i++){
  scanf("%lld",&b[i]);
 }
 int ans=0;
 for(int i=0;i<m;i++){
  bool flag=binary_search(b[i]);
  if(flag==true){
   ans++;
  }
 }
 printf("%d",ans);
 return 0;
}

原文地址:https://www.cnblogs.com/cxs070998/p/11243396.html