poj 4088:集合运算


题目:(至于4089。那个问题做过。使用归并思想,所以没有写)

描写叙述

小张须要从一批数量庞大的正整数中挑选出第k小的数。由于数据量太庞大,挑选起来非常费劲,希望你能编程帮他进行挑选。

输入
第一行第一个是数据的个数n(10<=n<=106)。第二个是须要挑选出的数据的序号k(1<=k<=105),n和k以空格分隔;

第二行以后是n个数据T(1<=T<=109),数据之间以空格或者换行符分隔。
输出
第k小数(假设有同样大小的也进行排序。比如对1,2,3,8,8。第4小的为8。第5小的也为8)。
例子输入
10 5
1 3 8 20 2
9 10 12 8 9
例子输出
8

解题方案
借用于高速排序思想,查找第K小元素

代码

#include <iostream>
#include <fstream>
using namespace std; void main_solution();
void read_data( int *& data,int &n,int &k );
int min_k(int *data,int s,int e,int k); int main()
{
main_solution();
system("pause");
return 0;
} void read_data( int *& data,int &n,int &k )
{
ifstream reader;
reader.open( "data.txt" );
reader>>n;
reader>>k;
data = new int[n];
for(int i=0;i<n;i++)
{
reader>>data[i];
}
reader.close();
} int min_k(int *data,int s,int e,int k)
{
int t = s;
int another = e;
while(t != another)
{
if( t < another )
{
if( data[t] <= data[another] )
another --;
else
{
int d = data[another];
data[another] = data[t];
data[t] = d; d = another;
another = t;
t = d;
}
}
else
{
if( data[t] >= data[another] )
another ++;
else
{
int d = data[another];
data[another] = data[t];
data[t] = d; d = another;
another = t;
t = d;
}
}
} if( k == t-s+1 )
return data[t];
else if( k < t-s+1 )
return min_k(data,s,t-1,k);
else return min_k(data,t+1,e,k - (t-s+1)); } void main_solution()
{
int * data;
int n;
int k;
read_data(data,n,k);
cout<<min_k(data,0,n-1,k)<<endl;
}


poj 4088:Set操作的更多相关文章

  1. 数据结构--线段树--lazy延迟操作

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 53749   ...

  2. fhq_treap 总结

    今天跟着zcg大神学了一发fhq_treap 发现在维护区间问题上fhq_treap不仅思维量小,而且代码量更小 是Splay的不错的替代品,不过至今还是有一些问题不能很好的解决 譬如查询某个数在序列 ...

  3. POJ C++程序设计 编程题#4 字符串操作

    编程题#4: 字符串操作 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 给 ...

  4. poj 3225 间隙(横截面和填充操作)

    http://poj.org/problem?id=3225 一道题又做了一天. .这道题对我来说起初有N多难点. 1:区间的开闭怎样解决. . 2:如何把区间的交并补.对称差转化为对线段树的操作. ...

  5. Splay树(多操作)——POJ 3580 SuperMemo

    相应POJ题目:点击打开链接 SuperMemo Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 11309   Accept ...

  6. 线段树(区间操作) POJ 3325 Help with Intervals

    题目传送门 题意:四种集合的操作,对应区间的01,问最后存在集合存在的区间. 分析:U T [l, r]填充1; I T [0, l), (r, N]填充0; D T [l, r]填充0; C T[0 ...

  7. POJ 3225 Help with Intervals --线段树区间操作

    题意:给你一些区间操作,让你输出最后得出的区间. 解法:区间操作的经典题,借鉴了网上的倍增算法,每次将区间乘以2,然后根据区间开闭情况做微调,这样可以有效处理开闭区间问题. 线段树维护两个值: cov ...

  8. POJ C++程序设计 编程题#3 编程作业—文件操作与模板

    编程题#3: 整数的输出格式 来源: POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 1000kB 描述 利 ...

  9. POJ C++程序设计 编程题#2 编程作业—文件操作与模板

    编程题#2: 实数的输出格式 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 1000kB 描述 ...

随机推荐

  1. Wix打包系列(一)如何使用wix制作安装程序

    原文:Wix打包系列(一)如何使用wix制作安装程序 最近由于项目需要,需要给客户制作安装程序,一开始使用vs2005自带的打包工程来打包,但用了一段时间发现vs打包太死板,而且使用起来问题很多.收费 ...

  2. python实现了字符串的按位异或和php中的strpad函数

    近期在写自己主动化測试,因为开发加密中用到strpad和字符串的按位异或,而python中没有这种函数和功能,所以必须自己写一套,要不自己主动化測试无法进行,所以就用python实现了一下,因为在写字 ...

  3. Effective C++:条款38:通过一个复杂的模具has-a要么“基于一些实现”

    (一) public继承是"is-a"关联,"has-a"或"依据某物实现出(is-implemented-in-terms-of)"的意思 ...

  4. finger用户名、主目录、停滞时间、登录时间

    finger yum install finger    1.作用    finger用来查询一台主机上的登录账号的信息,通常会显示用户名.主目录.停滞时间.登录时间.登录Shell等信息,使用权限为 ...

  5. Xcode6在10.9.4上面crash解决

    具体请看我的evernote 这里: 在10.9.4系统上面直接安装xcode6的beta3.和平时一样, 1.将beta3拖拽到application文件夹中. 2.等待copy完毕,执行xcode ...

  6. 异构数据库迁移 db2---oracle

    异构数据库迁移 其他数据库迁移到oracle,以移植db2数据库对象到Oracle的操作说明为例,其他数据库迁移到oracle类似. 移植之平台和相关工具 OS:linux DBMS:db2  Ora ...

  7. pygame各个模块概述

    在pygame中,有很多模块,每个模块对应着不同的功能,如果我们知道这些模块是做什么的,那么,对我们的游戏开发会起到关键性的作用. 我们就说说pygame中的各个模块吧!!! #pygame modu ...

  8. 【架构之路之WCF全析(一)】--服务协定及消息模式

    上周微软开公布会说.NET支持全然跨平台和并开放Core源代码的新闻,让我们顿时感到.NET要迎来它的春天.尽管早在几年前.NET就能开发Android和IOS,可是这次的跨平台把Linux都放到了微 ...

  9. html中滚动栏的样式

    DIV滚动栏设置 (CSS)2008/09/26 03:07div 中滚动栏的控制2008年01月06日 星期日 01:181)隐藏滚动栏<body style="overflow-x ...

  10. Web Worker在WebKit中的实现机制

    web worker 是执行在后台的 JavaScript,独立于其它脚本.不会影响页面的性能.这是HTML5的一个标准:实现上讲.浏览器为wokrer启动了新的线程,从而实现了异步操作的功能; 以下 ...