题意:
给一个长度为n的a数组和一个长度为m的b数组,问相邻的b数组元素中间最多有多少个a数组元素??
输入
第一行输入t,代表t组样例
输入n和m,分别代表a数组和b数组的长度
输入a数组
输入b数组
输出
如果ans == 0,输出Impossible
否则,输出ans
思路:
lower_bound和upper_bound的使用
代码实现:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 5e5 + 5;
int a[maxn];
int b[maxn];
int main(){
int t;
scanf("%d",&t);
while(t--){
int n,m;
scanf("%d%d",&n,&m);
for(int i = 1;i <= n;i++){
scanf("%d",&a[i]);
}
for(int j = 1;j <= m;j++){
scanf("%d",&b[j]);
}
sort(a + 1,a + 1 + n);
sort(b + 1,b + 1 + m);
b[0] = -1e9;
b[m + 1] = 1e9 + 5;
int ans = -1;
for(int i = 1;i <= m + 1;i++){//lower_bound和upper_bound的用法
int l = upper_bound(a + 1,a + 1 + n,b[i - 1]) - a;
int r = lower_bound(a + 1,a + 1 + n,b[i]) - a;
r--;//无论是大于还是等于,a数组的元素想要在中间,r必须减1
ans = max(ans,r - l + 1);
}
if(ans > 0) printf("%d\n",ans);
else printf("Impossible\n");
}
return 0;
}