Description

有两个非负整数数列,元素个数分别为N和M。从两个数列中分别任取一个数相乘,这样一共可以得到NM个数,询问这NM个数中第K小数是多少。

时间限制为20ms 。

Input

输入文件包含三行。

第一行为三个正整数N,M和K。

第二行为N个整数,表示第一个数列。

第三行为M个整数,表述第二个数列。

Output

输出文件包含一行,一个正整数表示第K小数。

Sample Input

Sample1:

2 3 4

1 2

2 1 3

Sample2:

5 5 18

7 2 3 5 8

3 1 3 2 5

Sample Output

Sample1:

3

Sample2:

16

比较傻逼的题,沙茶都能想到二分答案k,然后计算有多少\(a[i]*b[j]<=k\)的点对.

计算也水的一比,给a,b排个序,然后在a中枚举i,可以知道j在b中是一段\(1~j'\),这一段中都可以满足.

然后因为随着i递增j递减,check就是O(n+m)的了.

// It is made by XZZ
// Fei Fan Ya Xi Lie~~~
#include<cstdio>
#include<algorithm>
using namespace std;
#define il inline
#define rg register
#define vd void
typedef int mainint;
#define int long long
typedef long long ll;
il int gi(){
rg int x=0,f=1;rg char ch=getchar();
while(ch<'0'||ch>'9')f=ch=='-'?-1:f,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
const int maxn=20001;
int a[maxn],b[maxn],n,m,k;
il ll check(int num){
int r=m,ret=0;
for(rg int l=1;l<=n;++l){
while(r&&a[l]*b[r]>num)--r;
if(r==0)break;
ret+=r;
}
return ret;
}
mainint main(){
n=gi(),m=gi(),k=gi();
for(rg int i=1;i<=n;++i)a[i]=gi();
for(rg int i=1;i<=m;++i)b[i]=gi();
sort(a+1,a+n+1),sort(b+1,b+m+1);
ll l=a[1]*b[1],r=a[n]*b[m],mid;
while(l<r){
mid=(l+r)>>1;
if(check(mid)>=k)r=mid;
else l=mid+1;
}
printf("%lld\n",l);
return 0;
}

JZOJ 10043 第k小数的更多相关文章

  1. 题解【CJOJ2608】[JZOJ 100043]第k小数

    P2608 - [JZOJ 100043]第k小数 Description 有两个非负整数数列,元素个数分别为N和M.从两个数列中分别任取一个数相乘,这样一共可以得到N*M个数,询问这N*M个数中第K ...

  2. 第K 小数

    [问题描述]有两个正整数数列,元素个数分别为N和M.从两个数列中分别任取一个数相乘,这样一共可以得到N*M个数,询问这N*M个数中第K小数是多少.[输入格式]输入文件名为number.in.输入文件包 ...

  3. 数组第K小数问题 及其对于 快排和堆排 的相关优化比较

    题目描述 给定一个整数数组a[0,...,n-1],求数组中第k小数 输入描述 首先输入数组长度n和k,其中1<=n<=5000, 1<=k<=n 然后输出n个整形元素,每个数 ...

  4. Bsoj 1322 第K小数

    第K小数 Description 现在已有N个整数,你有以下三种操作: 1 A:表示加入一个值为A的整数: 2 B:表示删除其中值为B的整数: 3 K:表示输出这些整数中第K小的数: Input 第一 ...

  5. 算法打基础——顺序统计(找第k小数)

    这次主要是讲如何在线性时间下找n个元素的未排序序列中第k小的数.当然如果\(k=1 or k=n\),即找最大最小 数,线性时间内遍历即可完成,当拓展到一般,如中位数时,相关算法就值得研究了.这里还要 ...

  6. 查找第K小数

    题目描述 查找一个数组的第K小的数,注意同样大小算一样大. 如  2 1 3 4 5 2 第三小数为3. 输入描述: 输入有多组数据.每组输入n,然后输入n个整数(1<=n<=1000), ...

  7. OJ2237第k小数题解

    题目描述: 有n个数,请你找出第k小的数. 输入描述: 第一行有2个正整数n,k(n,k<=10^7)第二行有n个非负数ai(ai<=10^5) 输出描述: 输出第k小的数. 输入样例: ...

  8. 【递归打卡2】求两个有序数组的第K小数

    [题目] 给定两个有序数组arr1和arr2,已知两个数组的长度分别为 m1 和 m2,求两个数组中的第 K 小数.要求时间复杂度O(log(m1 + m2)). [举例] 例如 arr1 = [1, ...

  9. 两个有序数组的上中位数和第K小数问题

    哈,再介绍个操蛋的问题.当然,网上有很多解答,但是能让你完全看懂的不多,即便它的结果是正确的,可是解释上也是有问题的. 所以,为了以示正听,我也做了分析和demo,只要你愿意学习,你就一定能学会,并且 ...

随机推荐

  1. NSArray排序方法讲解

    NSArray排序方法讲解 给数组排序有着多种方式 最麻烦的是sortedArrayUsingSelector:,其次是sortedArrayUsingDescriptors:,最容易使用的就是sor ...

  2. Python(二)列表的增删改查

    一,列表的增删改查 列表中增加元素: 1,从列表的末尾增加一个元素:append("") 2,从列表中插入一个元素:insert(下标位置,插入的元素) 合并列表: 1,name. ...

  3. 一、Linux中的常用命令2 二、Vim编辑器的使用

    一.Linux的常用命令###<1>文件目录操作 13. echo:用于输出字符串,shell编程,echo 1. 输出字符串 : echo str ,shell编程会使用(类似java中 ...

  4. System.Data.DbType与各类数据库的数据类型的映射关系

    有如下类型的映射对照: System.Data.SqlClient.SqlDbType System.Data.OleDb.OleDbType System.Data.Odbc.OdbcType Sy ...

  5. B/S网络概述

    B/S网络架构 随着Web2.0时代的到来,互联网的网络架构已经从传统的C/S架构转变到更加方便快捷的B/S架构.这样的转化简化了人们上网的方式,也加速了互联网行业的发展. B/S架构的好处: 1.客 ...

  6. 扯不清楚的virtual和abstract

    定义Person类: class Person { public void Say() { Console.WriteLine("I am a person"); } } 现在,我 ...

  7. javascript花式理解闭包

    一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量 ...

  8. 线性dp

    线性dp应该是dp中比较简单的一类,不过也有难的.(矩乘优化递推请出门右转) 线性dp一般是用前面的状态去推后面的,也有用后面往前面推的,这时候把循环顺序倒一倒就行了.如果有的题又要从前往后推又要从后 ...

  9. [JSOI2018]潜入行动

    题目 我好菜啊,嘤嘤嘤 原来本地访问数组负下标不会报\(RE\)或者\(WA\),甚至能跑出正解啊 这道题还是非常呆的 我们发现\(k\)很小,于是断定这是一个树上背包 发现在一个点上安装控制器并不能 ...

  10. 优化方法:SGD,Momentum,AdaGrad,RMSProp,Adam

    参考: https://blog.csdn.net/u010089444/article/details/76725843 1. SGD Batch Gradient Descent 在每一轮的训练过 ...