K12866 班级合并
今天我们讲班级合并,同样先看题目和样例。
题目虽然复杂,但实际上很简单,就是二分查找的应用。
int efcz(int a[],int l,int r,int x){
while(l<r){
int m=(l+r)/2;
if(a[m]==x) return m;
else if(a[m]>x) r=m;
else l=m+1;
}
return -1;
}
来看一下这题的代码:
#include<bits/stdc++.h>
using namespace std;
int a[100100*4];
int efcz(int a[],int l,int r,int x){
while(l<r){
int m=(l+r)/2;
if(a[m]==x) return m;
else if(a[m]>x) r=m;
else l=m+1;
}
return -1;
}
int main(){
int n,m,k,q;
string s;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i]>>s;
cin>>m;
for(int i=1;i<=m;i++) cin>>a[i+n]>>s;
cin>>q;
sort(a+1,a+1+n+m);
for(int i=1;i<=q;i++){
cin>>k;
int x=k;
int l=1,r=n+m+1;
cout<<efcz(a,l,r,x)<<endl;
}
return 0;
}
如有错误请及时指出,谢谢观看,拜拜~