1105 第K大的数
第1行:2个数N和K,中间用空格分隔。N为数组的长度,K对应第K大的数。(2 <= N <= 50000,1 <= K <= 10^9)
第2 - N + 1行:每行2个数,分别是A[i]和B[i]。(1 <= A[i],B[i] <= 10^9)
输出第K大的数。
3 2
1 2
2 3
3 4
9
思路:二分,先排序,首先二分答案,答案的范围在ans[0]*bns[0]---ans[n-1]*bns[n-1]之间,然后二分统计这个答案的前面是否有大于等于k个比他大的,符合的话并且二分检查这个答案是否存在。
1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string.h>
5 #include<queue>
6 #include<math.h>
7 #include<set>
8 #include<vector>
9 #include<string.h>
10 using namespace std;
11 typedef long long LL;
12 typedef struct node {
13 LL x;
14 LL y;
15 } ss;
16 LL ans[60000];
17 LL bns[60000];
18 bool check(LL n,LL N,LL M) {
19 int i,j;
20 LL cnt = 0;
21 for(i = 0; i < N; i++) {
22 int l = 0;
23 int r =N;
24 int id = -1;
25 while(l<=r) {
26 int mid = (l+r)/2;
27 if(bns[mid]*ans[i]>=n) {
28 id = mid;
29 r = mid - 1;
30 } else l= mid + 1;
31 }
32 if(id!=-1) {
33 if(n==12)printf("%d\n",id);
34 cnt += N-id;
35 }
36 }
37 if(cnt>=M)return true;
38 return false ;
39 }
40 bool er(int n,int m,int ask);
41 bool test(LL mid,LL N,LL M);
42 int main(void) {
43 LL N,M;
44 scanf("%lld %lld",&N,&M);
45 int i,j;
46 for(i = 0; i < N; i++) {
47 scanf("%lld %lld",&ans[i],&bns[i]);
48 }
49 sort(ans,ans+N);
50 sort(bns,bns+N);
51 LL ak = ans[0]*bns[0];
52 LL bk = ans[N-1]*bns[N-1];
53 LL all = -1;//printf("%lld %lld\n",ak,bk);
54 while(ak<=bk) {
55 LL mid = (ak+bk)/2;
56 if(check(mid,N,M)) {
57 if(test(mid,N,M))
58 all = max(mid,all);
59 ak = mid + 1;
60 } else bk = mid-1;
61 }
62 printf("%lld\n",all);
63 return 0;
64 }
65 bool test(LL mid,LL N,LL M) {
66 int i,j;
67 LL kk;
68 for(i = 0; i < N; i++) {
69 if(mid%ans[i]==0) {
70 if(er(0,N,mid/ans[i]))
71 return true;
72 }
73 }
74 }
75 bool er(int n,int m,int ask) {
76 if(n>m)return false;
77 int mid = (n+m)/2;
78 if(bns[mid]==ask) {
79 return true;
80 } else if(bns[mid]>ask) {
81 return er(n,mid-1,ask);
82 } else return er(mid+1,m,ask);
83 }
复杂度N*log(N);
1105 第K大的数的更多相关文章
- 51 nod 1105 第K大的数
1105 第K大的数 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 数组A和数组B,里面都有n个整数.数组C共有n^2个整数,分别是A[0] * ...
- 1105 第K大的数(二分)
1105 第K大的数 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 数组A和数组B,里面都有n个整数.数组C共有n^2个整数,分别是A[0] * B[0],A[0 ...
- 51nod 1105 第K大的数 【双重二分/二分套二分/两数组任意乘积后第K大数】
1105 第K大的数 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 数组A和数组B,里面都有n个整数.数组C共有n^2个整数,分别是A[0] * ...
- 51NOD 1105 第K大的数
数组A和数组B,里面都有n个整数. 数组C共有n^2个整数,分别是: A[0] * B[0],A[0] * B[1] ...... A[0] * B[n-1] A[1] * B[0],A[1] * B ...
- AC日记——第K大的数 51nod 1105
1105 第K大的数 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 数组A和数组B,里面都有n个整数.数组C共有n^2个整数,分别是A[0] * ...
- 51nod 1105:第K大的数
1105 第K大的数 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 数组A和数组B,里面都有n个整数.数组C共有n^2个整数,分别是A[0] * ...
- [51NOD1105]第k大的数(二分答案)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1105 先排序,二分上下界分别是最小的两个数和最大的两个数的乘积 ...
- POJ 2985 The k-th Largest Group(树状数组 并查集/查找第k大的数)
传送门 The k-th Largest Group Time Limit: 2000MS Memory Limit: 131072K Total Submissions: 8690 Acce ...
- 51nod p1175 区间中第K大的数
1175 区间中第K大的数 基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 一个长度为N的整数序列,编号0 - N - 1.进行Q次查询,查询编号i至j的所有 ...
随机推荐
- spl_autoload_register的作用
spl_autoload_register的作用 当php实例化一个类的时候,这个类如果在另外的文件,那么不用include或require的时候就会报错,为了解决这个问题,可以用spl_autolo ...
- c语言转义字符如下
#define MQTT_EVENT_REPORT_BOX_STATUS_FORMAT "{"\ ...
- 在VS2008环境下编写C语言DLL,并在C++和C#项目下调用 (转载)
1.编写DLL a)文件--打开--新建项目--Win32,右侧Win32项目,填写好项目名称,点击"下一步", 应用程序类型选择:"DLL(D)",附加选项: ...
- 04 Windows安装python运行环境
安装python运行环境 使用微信扫码关注微信公众号,并回复:"Python工具包",免费获取下载链接! 1.卸载程序(电脑未装此程序,跳过此过程) 卸载这两个程序 出现下图所示, ...
- TD课程通最终版本体验
功能上,新版本增加了学校教室的上课情况,有无课程可以清楚查询,如下图: 在添加课程的设置上有改进,相比于之前编辑课程后不能保存,新版本在可保存的基础上又增加了登陆教务系统的功能,学生使用更加方便快捷, ...
- 学习java 7.21
学习内容: 模块使用 AWT是窗口框架 它从不同平台的窗口系统中抽取出共同组件,当程序运行时,将这些组件的创建和动作委托给程序所在的运行平台.简而言之,当使用AWT编写图形界面应用时,程序仅指定了界面 ...
- linux 内存变量的分布
我们知道,linux通过虚拟内存管理进程的内存(进程的地址空间),而进程的地址空间分布如下 : 从进程的空间中可以看出,内存中的变量有的来自可执行elf文件,在elf文件中已经分配好存储空间,有的是在 ...
- 学习Vue源码前的几项必要储备(一)
从接下来的一段时间里,Mg要进行阅读源码的工作.再阅读源码前,梳理一下准备工作. 7项重要储备 Flow 基本语法 发布/订阅模式 ES6+ 语法 原型链.闭包 函数柯里化 event loop 1. ...
- 【leetcode】721. Accounts Merge(账户合并)
Given a list of accounts where each element accounts[i] is a list of strings, where the first elemen ...
- go 代理
环境变量中设置 #GO111MODULE=auto GOPROXY=https://goproxy.io 如果不第一次,则在命令行设置 go env -w GO111MODULE=on go env ...