题目描述

给你一些整数,你要找出第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小的数的更多相关文章

  1. cogs930找第k小的数(k-th number)

    cogs930找第k小的数(k-th number) 原题链接 题解 好题... 终极版是bzoj3065(然而并不会) 先讲这个题... 维护\(n+1\)个值域线段树(用主席树),标号\(0\) ...

  2. LeetCode:二叉搜索树中第K小的数【230】

    LeetCode:二叉搜索树中第K小的数[230] 题目描述 给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素. 说明:你可以假设 k 总是有效的,1 ≤ k ...

  3. LeetCode:乘法表中的第K小的数【668】

    LeetCode:乘法表中的第K小的数[668] 题目描述 几乎每一个人都用 乘法表.但是你能在乘法表中快速找到第k小的数字吗? 给定高度m .宽度n 的一张 m * n的乘法表,以及正整数k,你需要 ...

  4. caioj1441:第k小的数Ⅰ

    [传送门:caioj1441] 简要题意: 给出一个n个数的序列,m个询问,每个询问输入l,r,k,输出第l个数到第r个数第k小的数 题解: 首先想到线段树,但是做不到询问区间的第几小,只能做到最大或 ...

  5. 【题解】P1373 小a和uim之大逃离

    [题解]P1373 小a和uim之大逃离 考虑到可能会MLE,考虑状态压缩一下 由于只要得到他们的差就行了,所以直接少记录一维就好了 \(dp(i,j,r,1/0)\)表示在\(i,j\)点,当前ui ...

  6. hdu 2838 Cow Sorting 树状数组求所有比x小的数的个数

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

  7. [程序员代码面试指南]第9章-在两个长度相等的排序数组中找到第k小的数(二分)

    题目 给定两个有序数组arr1和arr2,再给定一个整数k,返回所有的数中第k小的数. 题解 利用题目"在两个长度相等的排序数组中找到第上中位数"的函数 分类讨论 k < 1 ...

  8. 求第k小的数

    题目链接:第k个数 题意:求n个数中第k小的数 题解: //由快速排序算法演变而来的快速选择算法 #include<iostream> using namespace std; const ...

  9. *HDU2852 树状数组(求第K小的数)

    KiKi's K-Number Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

随机推荐

  1. 数据结构与算法 基于c语言篇

    学习数据结构与算法走向深蓝之路 第一章:数据结构与算法概念型 数据结构:数据之间的相互关系,即是数据的组织形式. 基本组成:{ 数据:信息的载体 数据元素:数据基本单位: } 其结构形式有四种: 1, ...

  2. 20155301 Exp9 Web安全基础

    20155301 Exp9 Web安全基础 1.实验后回答问题 (1)SQL注入攻击原理,如何防御 答 :原理: 利用现有应用程序,将恶意的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web ...

  3. 11.8 开课二个月零四天 (Jquery取属性值,做全选,去空格)

    1.jquery取复选框的值 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt ...

  4. SSIS 你真的了解事务吗?

    事务用于处理数据的一致性,事务的定义是,处于同一个事务中的操作是一个工作单元,要么全部执行成功,要么全部执行失败.把事务的概念应用到在实际的SSIS Package场景中,如何在Package中实现事 ...

  5. Java过滤器与SpringMVC拦截器的差异学习笔记

    学习摘录地址:http://blog.csdn.net/chenleixing/article/details/44573495 今天学习和认识了一下,过滤器和SpringMVC的拦截器的区别,学到了 ...

  6. 设计模式 笔记 责任链模式 chain of responsibility

    //---------------------------15/04/25---------------------------- //Chain of responsibility 责任链----- ...

  7. .Net Core 分布式微服务框架介绍 - Jimu

    系列文章 .Net Core 分布式微服务框架介绍 - Jimu .Net Core 分布式微服务框架 - Jimu 添加 Swagger 支持 一.前言 近些年一直浸淫在 .Net 平台做企业应用开 ...

  8. git 报错git-upload-pack 解决方法

    报错如下: bash: git-upload-pack: command not foundfatal: The remote end hung up unexpectedly 原因:原来代码服务器上 ...

  9. 关于ueditor一些使用记录

    1.使用的引用配置顺序 <script src="utf8-net/ueditor.config.js"></script> <script src= ...

  10. PHP学习 类型 变量 常数 运算符

    PHP支持下列8种类型 标量类型 scalar type整数 integer浮点数 float double布尔 boolean字符串 string 特殊类型 special typeNULL资源 r ...