# include<cstdio>
# include<algorithm>
using namespace std;
typedef long long LL;
const LL maxk=1e10;
LL a[10000],b[10000];
int A,B;
int cmp(int x,int y)
{
return x>y;
}
LL find(int aa,LL m)
{
int l=-1,r=B;//l初始为-1
while(r>l)
{
int mm=(r-l)/2+l;
if(aa*b[mm]>=m)l=mm+1;//l增加1
else r=mm;
}
if(l<0) return 0;
else return l;
}
LL bid(LL m)
{
LL res=0;
for(int i=0;i<A;i++)
res+=find(a[i],m);//对每一个整数,当取a[i]时,b[i]中有及格满足相乘大于m
return res;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
LL k,s,l,r;
scanf("%d%d%lld",&A,&B,&k);
for(int i=0;i<A;i++)
scanf("%d",&a[i]);
for(int i=0;i<B;i++)
scanf("%d",&b[i]);
sort(a,A+a,cmp);
sort(b,b+B,cmp);
l=1;r=maxk;//二分判断一个整数在A,B数组中的次序
while(l<r)
{
LL m=(r-l)/2+l;
if(bid(m)>=k) l=m+1;//二分查找时l要不断加,避免进入死循环!!
else r=m;
}
printf("%lld\n",l-1);
}
}
xdu1267 二分查找
最新推荐文章于 2016-01-20 19:26:00 发布