hihocoder1133(二分求第k小)
来源:互联网 发布:淘宝装修怎么弄全屏 编辑:程序博客网 时间:2024/06/06 03:25
链接:点击打开链接
题意:求无序数组的第k小
代码:
#include <queue>#include <vector>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;int n,k,ans,a[1000005];int change(int ll,int rr){ int tt=a[ll]; while(ll<rr){ while(ll<rr&&a[rr]>tt) rr--; a[ll]=a[rr]; while(ll<rr&&a[ll]<tt) ll++; a[rr]=a[ll]; } a[ll]=tt; return ll;}void cal(int ll,int rr){ int op=change(ll,rr); if(op==k){ ans=a[op]; return; } else if(op>k) cal(ll,op-1); else cal(op+1,rr);}int main(){ //主要思想还是基于快排,就是在排序的时候 int i; //根据左右区间的大小从而只在一个区间继续排序 while(scanf("%d%d",&n,&k)!=EOF){ //这样做相比直接排序求第k小的复杂度的常数要小 for(i=1;i<=n;i++) //期望复杂度为O(n+n/2+n/4+...+1)=O(2N) scanf("%d",&a[i]); //但是既然是基于快排的思想,我们依然可以构造 if(k<=0||k>n){ //一个递增或递减的数列叉掉这个算法 puts("-1"); //所以我们依然可以先随机化一下再进行操作 continue; } cal(1,n); printf("%d\n",ans); } return 0;}
阅读全文
0 0
- hihocoder1133(二分求第k小)
- hihocoder1133 : 二分·二分查找之k小数
- POJ3685 二分求第k小的值
- hdu 2104 K-th Number(静态求区间第k小+整体二分)
- 求第k小元素
- 计蒜客-求第k小
- 计蒜客-求第K小
- HDU 5412 CRB and Queries 求区间第k小 CDQ分治+整体二分
- hdu 5412 CRB and Queries(动态求区间第k小+整体二分)
- poj3685(二分查找第k小)
- POJ3579_Median_二分求第k大(两重二分)
- 树状数组求第K小元素
- 【分治】求第k小值
- 快速排序求第K小
- 求第k小的数
- Java 求第K小的数
- 树状数组求第K小元素
- 算法求第K小元素思路
- 关于LVM管理PVcreate过程中错误Device /dev/sdb not found (or ignored by filtering)
- c++string的深拷贝
- Java实现-翻转链表2
- 2017年,该如何选择容器编排方案? swarm/kubernetes/Mesos ?
- 帮助Bsny
- hihocoder1133(二分求第k小)
- Redis 第一次安装配置,使用
- spring参数传递和检验
- 谷歌tensorflow/models/objectdetection安装配置
- selenium3.n的问题
- 面向对象2---封装,this,构造方法
- 一个诡异的SIGILL问题,,原来是这样导致的
- ANDROID中调用文件管理器并返回选中文件的路径
- 北京大学可视化发展前沿研究生暑期学校Day2