为什么我自己写的二分不如标准库啊
查看原帖
为什么我自己写的二分不如标准库啊
1271698
0315cbw楼主2024/7/26 11:36

手写的二分106ms,调库98ms,学了半天白学了。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
inline int read(){
  int x=0,f=1;char ch=getchar();
  while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();	}
  while(ch<='9'&&ch>='0'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
  return x*f;
}
int a[100005];
int b[100005];
bool two_divide(int l,int r,int target){
  while(l<=r){
  	int mid=(l+r)/2;
  	if(b[mid]==target){
  		return 1;
  	}
  	if(l==r){
  		return 0;
  	}
  	if(b[mid]<target){
  		l=mid+1;
  	}
  	else if(b[mid]>target){
  		r=mid;
  	}
  	
  }
  return 0;
}
int main(){
  int n=read();
  int m=read();
  for(int i=1;i<=n;i++){
  	a[i]=read();
  }
  for(int i=1;i<=m;i++){
  	b[i]=read();
  }
  sort(b+1,b+1+m);
  for(int i=1;i<=n;i++){
  	if(two_divide(1,m,a[i])){
  		printf("%d ",a[i]);
  	}
  }
}
2024/7/26 11:36
加载中...