【题解】第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 ...
随机推荐
- keepalived 做全端口映射
global_defs { lvs_id BACKUP } vrrp_sync_group VGM { group { VI_1 } } vrrp_inst ...
- array_reduce()使用
这个函数的作用是,把数组中的值循环放到回调函数里处理,结果返回一个单一的值.(applies iteratively the callback function to the elements of ...
- OSS介绍
1 基本概念介绍 1.1 存储空间(Bucket) 存储空间是您用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间.您可以设置和修改存储空间属性用来控制地域.访问权限.生命周期等, ...
- .net 设置Webbowser 版本
.net 里的Webbowser控件默认情况是用IE7来渲染 可修改注册表试用是最新的版本来渲染: using System; using System.Collections.Generic; us ...
- c# 多线程和异步
有时候需要多线程来运行处理后端和UI的更新. 通常用 ((Action)delegate() { if (isBussy) { return; } isBussy = true; while (tru ...
- 20155216 Exp7 网络欺诈技术防范
Exp7 网络欺诈技术防范 基础问题回答 1.通常在什么场景下容易受到DNS spoof攻击? 1.在同一局域网下比较容易受到DNS spoof攻击,攻击者可以冒充域名服务器,来发送伪造的数据包,从而 ...
- bodymovin实现将AE动画转换成HTML5动画
做一个简单的记录,直接贴代码吧,主要还是设计师提供的那个json <!DOCTYPE html> <html> <head> <style> body ...
- WPF DataGrid列设置为TextBox控件的相关绑定
在wpf的DataGrid控件中,某一列的数据模板为TextBox控件的话,绑定Text="{Binding TxtSn, UpdateSourceTrigger=PropertyChang ...
- DelayQueue 订单限时支付实例
1.订单实体 package com.zy.entity; import java.util.Date; import java.util.concurrent.Delayed; import jav ...
- HTML 样式 (style) 实例
77.HTML 样式 (style) 实例HTML 的 style 属性style 属性的作用: 提供了一种改变所有 HTML 元素的样式的通用方法. 样式是 HTML 4 引入的,它是一种新的首选的 ...