input

1<=T<=20

1<=n<=100000,1<=k<=n*n

a1 a2 ... an 0<ai<=10000

b1 b2 ... bn 0<bi<=10000

output

第k大的数(包含重复)

做法:类似字符串的编码解码,这里是解码过程,将k解码为对应的01串,把第K大的数看成一个01串,统计出比1000000000000000000000000000000000大的数有多少个,从而确定第一个数是0还是1,然后第二位也是这样,不断的重复直到找到第K大的数,复杂度为O(2nlog(maxa*maxb))

a[0]*b[0]<=a[0]*b[1]<=...<=a[0]*b[n-1]

a[1]*b[0]<=a[1]*b[1]<=..<=a[1]*b[n-1]

...

a[n-1]*b[0]<=a[n-1]*b[1]<=...<=a[n-1]*b[n-1]

同时从上到下也有这样的性质,所以当a[i]*b[j]>val时,a[i+1]*b[j]>val

 #include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL; const int MAXN = ; int a[MAXN], b[MAXN];
int T, n;
LL k; bool check(int val)//统计比val小的数的个数cnt,看cnt比k大还是比k小
{
LL cnt = ;
for(int i = , j = n - ; i < n; ++i)
{
while(j >= && a[i] * b[j] > val) --j;
cnt += j + ;//j+1指每一列数中比val大的数
}
return cnt >= k;
} int solve()//二分查找第k大的数
{
int l = a[] * b[], r = a[n - ] * b[n - ];
while(l < r)
{
int mid = (l + r) >> ;
if(!check(mid)) l = mid + ;
else r = mid;
}
return l;
} int main()
{
scanf("%d", &T);
while (T--)
{
scanf("%d%I64d", &n, &k);
for(int i = ; i < n; ++i) scanf("%d", &a[i]);
for(int i = ; i < n; ++i) scanf("%d", &b[i]);
sort(a, a + n);
sort(b, b + n);
k = (LL)n * n - k + ;
printf("%d\n", solve());
}
return ;
}

input

1<=T<=10

1<=n,k<=100000

a1 a2 ... an an<=10^9

b1 b2 ... bn bn<=10^9

output

第k小的数(不包含重复)

做法:用大白上的有限队列做法,先将第一列的数放进从小到大的优先队列,每出队一个数就将同一行的下一个数放入队列

a[0]+b[0]<=a[0]+b[1]<=...<=a[0]+b[n-1]

a[1]+b[0]<=a[1]+b[1]<=..<=a[1]+b[n-1]

...

a[n-1]+b[0]<=a[n-1]+b[1]<=...<=a[n-1]+b[n-1]

两个数组各个数相加或相乘变成一个矩阵求第K大的更多相关文章

  1. ACM_求第k大元素(两次二分)

    求第k大 Time Limit: 6000/3000ms (Java/Others) Problem Description: 给定两个数组A和B,大小为N,M,每次从两个数组各取一个数相乘放入数组C ...

  2. poj 2985 The k-th Largest Group 树状数组求第K大

    The k-th Largest Group Time Limit: 2000MS   Memory Limit: 131072K Total Submissions: 8353   Accepted ...

  3. 无序数组求第K大的数

    问题描述 无序数组求第K大的数,其中K从1开始算. 例如:[0,3,1,8,5,2]这个数组,第2大的数是5 OJ可参考:LeetCode_0215_KthLargestElementInAnArra ...

  4. HDU 5249 离线树状数组求第k大+离散化

    KPI Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  5. 牛客网2016.4.11(两个数相加为sum/计数一个int型的二进制有多少个1/二叉树是否左右对称)

    求最小的两个数相加为sum //求最小的两个数相加为sum public ArrayList<Integer> FindNumbersWithSum(int [] array,int su ...

  6. 无序数组求第k大/第k小的数

    根据http://www.cnblogs.com/zhjp11/archive/2010/02/26/1674227.html 博客中所总结的7种解法,我挑了其中的解法3和解法6进行了实现. 解法3: ...

  7. POJ2985 The k-th Largest Group[树状数组求第k大值+并查集||treap+并查集]

    The k-th Largest Group Time Limit: 2000MS   Memory Limit: 131072K Total Submissions: 8807   Accepted ...

  8. 分别实现数组所有元素相加、相乘、相与——FP 风格

    var ops = { "plus": (x,y)=>x+y, "mul" : (x,y)=>x*y, "and" : (x,y ...

  9. python的reduce函数的使用方法详解以及使用案例,相加,相乘(处理一个序列,然后把序列进程合并操作)

    1.求列表的数字相加之和,还是之前的习惯,写for循环来实现 num_1=[1,2,3,4,5,6,7,8,9] a=0 for n in num_1: #a=a+n a+=n print (a) C ...

随机推荐

  1. 主题: jQuery异步调用KindEditor无法赋值【解决】

    KindEditor.ready(function (K) { window.editor1 = K.create('#tjssjs', { width: '480px', height: '150p ...

  2. MongoDB数据模型(一)

    原文地址 一.数据模型介绍 MongoDB中的数据有着灵活的架构.与SQL数据库不同,因为SQL数据库必须先定义表结构,然后才能向其中插入数据,而MongoDB的集合不强制任何文档结构.这个灵活性方便 ...

  3. MongoDB索引(一)

    原文地址 一.介绍 我们已经很清楚索引会提高查询效率.如果没有索引,MongoDB必须对全部集合进行扫描,即,扫描集合中每条文档以选择那些符合查询条件的文档.对查询来说如果存在合适的索引,则Mongo ...

  4. ashx入侵

    <%@ WebHandler Language="C#" Class="TextLd" %>using System;using System.Co ...

  5. Arch声卡配置

    ALSA Utilities Install the alsa-utils package. This contains (among other utilities) the alsamixer a ...

  6. Git Bash 简单操作

    在Windows下使用Git Bash,用的是Linux命令,常用几个文件操作命令如下: Windows命令 Linux命令 意义 cd e:\xxx cd /e/xxx 切换到xxx目录 cd pw ...

  7. dom小总结

    DOM是W3C的标准,分为3个不同的部分: 核心DOM:针对任何结构化文档的标准模型,XML DOM:针对XML文档的标准模型,HTML DOM:针对HTML文档的标准模型. HTML DOM中所有事 ...

  8. java基础算法题

    为了提高自己的代码能力和算法能力,我决定每天学习一道算法题,吸收前辈思想. [程序1] TestRabbit.java 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三 ...

  9. 搭建Linux3.4.2内核编辑环境

    (1)准备工作:1. 准备虚拟机2.安装工具链sudo tar xjf arm-linux-gcc-4.3.2.tar.bz2 -C /设置环境变量:sudo vi /etc/environment ...

  10. Jena 简介:通过 Jena Semantic Web Framework 在 Jave 应用程序中使用 RDF 模型

    简介: RDF 越来越被认为是表示和处理半结构化数据的一种极好选择.本文中,Web 开发人员 Philip McCarthy 向您展示了如何使用 Jena Semantic Web Toolkit,以 ...