【题解】第n小的数
题目描述
给你一些整数,你要找出第n小的数,也就是说把数据按升序排序后,输出下标是n的那个数,注意,我们规定下标是从0开始的。但是我们给出的数据的格式比较奇怪,我们是按区间给出,例如:给出两个区间:[1,3]、[5,7],那么代表的给出的数实际是{1,2,3,5,6,7},注意,我们给出的区间可能有重叠部分。例如:给出两个区间:[1,4]、[3,5],那么代表的给出的数实际是{1,2,3,3,4,4,5}。
输入输出格式
输入格式
第一行,一个整数t,表示我们给出t个区间。1≤t≤50。
接下来有t行,每行有两个整数:x和y,表示区间[x,y],其中,-2000000000≤x≤y≤2000000000。
最后一行,一个整数n,表示求出第n小的,下标从0开始,0≤n≤所有区间代表的实际的整数的个数,且n≤2000000000。
输出格式
一行,一个整数,表示第n小的数。
输入输出样例
输入样例一
2
1 3
5 7
4
输出样例一
6
输入样例二
2
1 4
3 5
3
输出样例二
3
题解
x,y很大,貌似不可做。
我们可以换一个角度,二分答案枚举要找的那个数,看一看排名是否为n即可。
#include <iostream>
#define MAXT 50 using namespace std; int t;
long long x[MAXT], y[MAXT];
int n;
long long l = , r = -, m;
long long tmpn;
long long num; int main()
{
cin >> t;
for(register int i = ; i < t; i++)
{
cin >> x[i] >> y[i];
if(x[i] < l) l = x[i];
if(y[i] > r) r = y[i];
}
cin >> n;
n++;//从第一开始记
while(l <= r)
{
tmpn = num = ;
m = (l + r) / ;
//cout << l << " " << r << " " << m << endl;
//for(int i = 1;i <= 19000000;i++);
for(register int i = ; i < t; i++)
{
if(m >= x[i] && m <= y[i])
{
tmpn += m - x[i] + ;
num++;
}
else if(m > y[i])
{
tmpn += y[i] - x[i] + ;
}
}
if(num && tmpn - num + <= n && tmpn >= n) break;
if(tmpn < n) l = m + ;
else r = m - ;
}
cout << m;
return ;
}
参考程序
【题解】第n小的数的更多相关文章
- cogs930找第k小的数(k-th number)
cogs930找第k小的数(k-th number) 原题链接 题解 好题... 终极版是bzoj3065(然而并不会) 先讲这个题... 维护\(n+1\)个值域线段树(用主席树),标号\(0\) ...
- LeetCode:二叉搜索树中第K小的数【230】
LeetCode:二叉搜索树中第K小的数[230] 题目描述 给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素. 说明:你可以假设 k 总是有效的,1 ≤ k ...
- LeetCode:乘法表中的第K小的数【668】
LeetCode:乘法表中的第K小的数[668] 题目描述 几乎每一个人都用 乘法表.但是你能在乘法表中快速找到第k小的数字吗? 给定高度m .宽度n 的一张 m * n的乘法表,以及正整数k,你需要 ...
- caioj1441:第k小的数Ⅰ
[传送门:caioj1441] 简要题意: 给出一个n个数的序列,m个询问,每个询问输入l,r,k,输出第l个数到第r个数第k小的数 题解: 首先想到线段树,但是做不到询问区间的第几小,只能做到最大或 ...
- 【题解】P1373 小a和uim之大逃离
[题解]P1373 小a和uim之大逃离 考虑到可能会MLE,考虑状态压缩一下 由于只要得到他们的差就行了,所以直接少记录一维就好了 \(dp(i,j,r,1/0)\)表示在\(i,j\)点,当前ui ...
- hdu 2838 Cow Sorting 树状数组求所有比x小的数的个数
Cow Sorting Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- [程序员代码面试指南]第9章-在两个长度相等的排序数组中找到第k小的数(二分)
题目 给定两个有序数组arr1和arr2,再给定一个整数k,返回所有的数中第k小的数. 题解 利用题目"在两个长度相等的排序数组中找到第上中位数"的函数 分类讨论 k < 1 ...
- 求第k小的数
题目链接:第k个数 题意:求n个数中第k小的数 题解: //由快速排序算法演变而来的快速选择算法 #include<iostream> using namespace std; const ...
- *HDU2852 树状数组(求第K小的数)
KiKi's K-Number Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
随机推荐
- always on 集群
准备工作 1. 四台已安装windows server 2008 r2 系统的虚拟机,配置如下: CPU : 1核 MEMORY : 2GB DISK : 40GB(未分区) NetAdapter ...
- Hive JDBC:Permission denied: user=anonymous, access=EXECUTE, inode=”/tmp”
今天使用JDBC来操作Hive时,首先启动了hive远程服务模式:hiveserver2 &(表示后台运行),然后到eclipse中运行程序时出现错误: Permission denied: ...
- MS SQL Server字符拆分函数
Insus.NET以前有用XQuery的nodes()方法写过一个函数,是MS SQL字符拆分的函数,http://www.cnblogs.com/insus/archive/2012/02/26/2 ...
- Android Notification的使用 - z
http://blog.csdn.net/new_one_object/article/details/55511253 另,博主其它文章也很好
- 20155202 张旭《网络对抗》Exp2 后门原理与实践
20155202 张旭<网络对抗>Exp2 后门原理与实践 基础问题回答 例举你能想到的一个后门进入到你系统中的可能方式? 捆绑在软件中 注入在可执行文件里 注入在office文件的宏里面 ...
- 2017-2018-2 《网络对抗技术》 20155310 第二周 Exp1 PC平台逆向破解(5)M
2017-2018-2 <网络对抗技术> 20155310 第二周 Exp1 PC平台逆向破解(5)M 一.实践目标 1.1实践介绍 本次实践的对象是一个名为pwn1的linux可执行文件 ...
- springboot的热部署和dubug
采用了项目聚合,产生一些不同,遇到的问题和解决方法分享下. 项目结构: rebuilder2 -htran 主项目 -htran-api 1.htran.pom <parent> < ...
- controlfile 备份到trace文件例子
主要是为了学习oracle的克隆.参考: http://www.dba-oracle.com/oracle_tips_db_copy.htm 执行: SQL>alter database bac ...
- idea ssm项目迁移到另一台机器上时出现不能正常启动项目的解决方案
首先右下角提示关联spring文件,关联之,然后启动,发现项目无法启动,然后开始排错 首先从这个日志里发现了这么一条提示信息 然后百度了一下,答案都是说 web.xml 之类的 spring拦截器问题 ...
- 记录下安装ES过程中遇到的错误及解决
1.集群配置 需要修改 cluster.name .node.name .network.host: 0.0.0.0[此处默认localhost].http.port: 9200 只要集群名相同,且机 ...