题目链接:http://hihocoder.com/contest/hiho37/problem/1 , 简单二分。


算法:

  题目即为求一个无序数组数组中第k小的数,由于数据量太大,排序是会超时的。

  采用提示的算法,即对于选定的Mid,以a[Mid]为支点进行一趟快排,这样比a[Mid]小的数都在Mid之前,比a[Mid]大的数在Mid之后。这时有如下三种情况:

  若k<Mid,则有第k小的数一定在a[L..Mid-1]之中,令R = Mid - 1

  若k=Mid,则a[Mid]就是我们要找的数

  若k>Mid,则第k小的数一定在a[Mid+1..R]之中,令L = Mid + 1。此处需特别注意,在a[Mid+1..R]我们查找的k'和原来的k不相同,现在的k'=k - Mid。

  这样重复LogN次之后便可找到目标数。

#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <cmath>
#include <string>
#include <string.h>
#include <algorithm>
using namespace std;
#define LL __int64
#define eps 1e-8
#define INF 1e8
const int maxn = + ;
int a[maxn];
int pass(int l , int r , int m)
{
int i = l;
int j = r;
int k = a[m];
while(i != j) {
while(a[j] > k && j > m)
j--;
a[m] = a[j];
m = j;
while(a[i] < k && i < m)
i++;
a[m] = a[i];
m = i;
}
a[i] = k;
return i;
}
int quick_sort(int l , int r , int k)
{
int m = (l + r) >> ;
int p = pass(l , r , m);
if(k > p) {
return quick_sort(p + , r , k);
} else if(k < p) {
return quick_sort(l , p - , k);
} else {
return a[p];
}
}
int main()
{
int n , k;
scanf("%d %d" , &n , &k);
for(int i = ; i <= n ; i++)
scanf("%d" , &a[i]);
printf("%d\n" , quick_sort( , n , k));
}

hiho一下 第三十七周 二分查找之k小数的更多相关文章

  1. hiho week 37 P1 : 二分·二分查找之k小数

    P1 : 二分·二分查找之k小数 Time Limit:10000ms Case Time Limit:1000ms Memory Limit:256MB 描述 在上一回里我们知道Nettle在玩&l ...

  2. hihoCoder 1133 二分·二分查找之k小数(TOP K算法)

    #1133 : 二分·二分查找之k小数 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回里我们知道Nettle在玩<艦これ>,Nettle的镇守府有很 ...

  3. Hiho : 二分·二分查找之k小数

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回里我们知道Nettle在玩<艦これ>,Nettle的镇守府有很多船位,但船位再多也是有限的.Nettl ...

  4. 【HIHOCODER 1133】 二分·二分查找之k小数

    描述 在上一回里我们知道Nettle在玩<艦これ>,Nettle的镇守府有很多船位,但船位再多也是有限的.Nettle通过捞船又出了一艘稀有的船,但是已有的N(1≤N≤1,000,000) ...

  5. 【hihoCoder】#1133 : 二分·二分查找之k小数

    题目描述 在上一回里我们知道Nettle在玩<艦これ>,Nettle的镇守府有很多船位,但船位再多也是有限的.Nettle通过捞船又出了一艘稀有的船,但是已有的N(1≤N≤1,000,00 ...

  6. hihocoder1133 二分·二分查找之k小数

    思路: 类似于快排的分治算法. 实现: #include <iostream> #include <cstdio> #include <algorithm> #in ...

  7. hihoCoder#1133 二分·二分查找之k小数

    原题地址 经典问题了,O(n)时间内找第k大的数 代码: #include <iostream> using namespace std; int N, K; int *a; int se ...

  8. 查找第K小数

    题目描述 查找一个数组的第K小的数,注意同样大小算一样大. 如  2 1 3 4 5 2 第三小数为3. 输入描述: 输入有多组数据.每组输入n,然后输入n个整数(1<=n<=1000), ...

  9. 【九度OJ】题目1174:查找第K小数 解题报告

    [九度OJ]题目1174:查找第K小数 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1174 题目描述: 查找一个数组的第 ...

随机推荐

  1. Sharepoint商务智能学习笔记之PowerPviot Service安装与配置(七)

    1) PowerPviot Service多服务器部署注意事项 PowerPviot Service不是Sharepoint自带的服务,要想使用PowerPviot Service需要先在sharep ...

  2. python drift

    install dependency(optional):(本文来自 不才b_d 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/sinat_36184075/arti ...

  3. FMDB 使用注意点

    关于FMDB最基本的使用我们就不在说了,这个网上大把的文章介绍,我就在这里总结几点我最近在写一个小东西的时候注意到的一点点东西: 一: 怎么看真机上SQLite数据库 我们在开发的过程中肯定有使用到真 ...

  4. ARC085F(动态规划,线段树)

    #include<bits/stdc++.h>using namespace std;const int maxn = 0x3f3f3f3f;int mn[801000];int cost ...

  5. .frm和.ibd恢复数据

    昨日晚上开发告诉我不小心truncate两个表的数据,要求还原.结果在阿里云上找到了备份内容,结果是物理备份文件.frm..ibd.心中一万个草泥马啊..没办法,开始还原吧. 1.查看测试机Mysql ...

  6. -bash: ./bak_1.py: /usr/bin/python^M: bad interpreter: 没有那个文件或目录

    在Windows的PyCharm中编写了一个Python文件,然后上传至CentOS中,已经添加执行权限,但是仍然会报如下的错误: 代码如下: #!/usr/bin/python # -*- codi ...

  7. burpsuite 抓HTTPS数据包

    抓HTTPS数据包 导出保存为cer证书文件,导入到受信任的根证书颁发机构 设置代理服务器与burp中proxy listeners保持一致 设置目标url 抓包 可用repeater发请求

  8. 设计模式实战研磨 ——第1篇 UML环境搭建

    starUML是开源的基于统一模式语言与模式驱动开发的平台,前身是Plastic,从1996年开始开发.1998年开始,Plastic转变为UML建模工具.2005年改名为StarUML,最新版本St ...

  9. Stream流、方法引用

    Stream流.方法引用 Stream流.方法引用 Stream流.方法引用 Stream流.方法引用 Stream流.方法引用 ... ...

  10. maven项目打包分析及打包后war包缺少配置文件报错的原因分析,使用progard混淆时配置分析

    1.maven打包: 一直以来我都没太注意过在myeclipse下使用run as来clean居然对项目的target目录没有进行操作,要让操作有效,需要进入到maven build...选项下,进行 ...