http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3278
一道不错的二分。。。第一次写这样的二分
#include<iostream>
#include<vector>
#include<map>
#include<stack>
#include<algorithm>
#include<queue>
#include<list>
#include<set>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<stdio.h>
#include<ctype.h>
#include<iomanip>
using namespace std;
#define LL long long
#define pi acos(-1)
#define N 100010
#define INF 999999999
#define eps 1e-8
//****************************************
//zoj 3278
//Copyright@leolin All rights reserved.
//****************************************
int b[N],g[N];
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
//freopen("a.txt","r",stdin);
int n,m;
LL k;
while(cin>>n>>m>>k)
{
int i;
for(i=1;i<=n;i++)
scanf("%d",&b[i]);
for(i=1;i<=m;i++)
scanf("%d",&g[i]);
sort(b+1,b+n+1,cmp);
sort(g+1,g+m+1,cmp);
LL l1=1ll*b[n]*g[m],r1=1ll*b[1]*g[1],mid1;
LL ans=l1;
while(l1<=r1)
{
mid1=(l1+r1)/2;
LL sum=0;
for(i=1;i<=n;i++)//mei ju boy
{
int l2=1,r2=m,mid2;
LL t=0;
while(l2<=r2)
{
mid2=(l2+r2)/2;
if(1ll*b[i]*g[mid2]>=mid1)
{
t=mid2;
l2=mid2+1;
}
else
r2=mid2-1;
}
sum+=t;//大于mid1的个数
}
if(sum>=k)
{
ans=mid1;
l1=mid1+1;
}
else
r1=mid1-1;
}
cout<<ans<<endl;
}
return 0;
}