当你帮我调了了这道题,你会发现洛谷也有双倍经验~
二分查找的简单题目
题目大意:
第2组数中的哪些数
在第1组数中出现了
从小到大输出所有满足条件的数。
比如:
第1组数有:8 7 9 8 2 6 3
第2组数有:9 6 8 3 3 2 10
那么应该输出:2 3 3 6 8 9
输入要求:
第一行两个整数n和m,分别代表2组数的数量
第二行n个正整数
第三行m个正整数
对于60%的数据1≤n,m≤1000,每个数<=2*10^9
对于100%的数据1≤n,m≤100000,每个数<=2*10^9
代码
#include <bits/stdc++.h>
using namespace std;
long long a[30000000],b[30000000];
long long n,m;
int erfen(int x){
long long l=1-1,r=n+1,mid;
while(l+1<r){
mid=(l+r)/2;
if(a[mid]<x){
l=mid;
}
if(a[mid]>x){
r=mid;
}
if(a[mid]==x){
return true;
}
}
return false;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=m;i++){
cin>>b[i];
}
sort(a+1,a+n+1);
sort(b+1,b+m+1);
for(int i=1;i<=m;i++){
if(erfen(b[i])==true){
cout<<b[i]<<" ";
}
}
return 0;
}