noip2008初赛-找第K大的数
2015-08-23 17:19
246 查看
noip2008C_4_2(找第k大的数)给定一个长度为1,000,000的无序正整数序列,以及另一个数n(1≤n≤1000000),然后以类似快速排序的方法找到序列中第n大的数(关于第n大的数:例如序列{1,2,3,4,5,6}中第3大的数是4)
var a:array[1..1000000]of integer; n,m,ans:longint; procedure swap(var a,b:integer); var t:integer; begin if (a<>b) then begin t:=a; a:=b; b:=t; end; end; function FindKth(left,right,n:integer):integer; var tmp,value,i,j:integer; begin if left=right then exit(left); tmp:=random(right-left)+left; swap(a[tmp],a[left]); value:=a[left]; i:=left; j:=right; while i<j do begin while (i<j) and (a[j]<value) do dec(j); if i<j then begin a[i]:=a[j]; inc(i); end else break; while (i<j) and (a[i]>value) do inc(i); if i<j then begin a[j]:=a[i]; dec(j); end else break; end; a[i]:=value; if i<n then begin inc(i); exit(FindKth(i,right,n)); end; if i>n then begin dec(i); exit(FindKth(left,i,n)); end; exit(i); end; var i:integer; begin randomize; assign(input,'in.txt'); reset(input); readln(m,n); for i:=1 to m do read(a[i]); ans:=FindKth(1,m,n); writeln(a[ans]); end.
相关文章推荐
- 女排世界杯中国夺两连胜 3-0横扫阿尔及利亚
- http报文与cookie技术
- 仿QQ5.0侧滑菜单实现
- android 组件Notification实例
- eclipse导入项目,项目名出现红叉的情况
- Swing 美化工具包
- Mozilla5.0的含义
- dojox/app应用中使用dijit/layout/ContentPane时上下文丢失
- C语言学习
- 用户控件
- 位域(位段)
- noip2008初赛-字符串替换
- listview重载问题的解决思路
- QPBOC快速借贷记流程(2)
- 最小生成树(Prim算法和Kruskal算法)—理解与论证
- EditText,TextView(富文件),Button,RadioButton
- create函数用法
- opencv学习(十)(opencv3.0.0+VS2012+win7)打开摄像头并且进行人脸识别的例子
- php get_object_vars()函数
- 如何自定义一个View,并动态设置style?