算法训练(1)——区间k大数查询
来源:互联网 发布:akka java 简明教程 编辑:程序博客网 时间:2024/06/05 19:46
写在开头
由于学业及等等各种复杂原因,10月份起就没有更新博客了。曾经有梦想参加ACM的,无奈没有环境和队友。今年学校第一年参与蓝桥杯,抱着试一试玩一玩的心态报了名。报名到现在也有一段时间了,已经练了一些题目了,打算把这个过程记录下来,方便以后查阅,也欢迎大家留言交流。
之前没有完成的系列文章可能得往后延了,但是等眼前一系列事情告一段落之后会续上的。
这一系列都是蓝桥杯的练习题,后面的文章都会尽量统一以“问题描述——输入格式——输出格式——样例输入——样例输出——数据规模与约定——解题思路——核心代码——注释”这样的结构来写。核心代码一律使用C++语言,main函数包括了输入输出流的重定向(方便调试而已)和对核心代码中TestXXX()函数的调用,就不放出来了。
问题描述
给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。
输入格式
第一行包含一个数n,表示序列长度。
第二行包含n个正整数,表示给定的序列。
第三个包含一个正整数m,表示询问个数。
接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。
输出格式
总共输出m行,每行一个数,表示询问的答案。
样例输入
5
1 2 3 4 5
2
1 5 2
2 3 2
样例输出
4
2
数据规模与约定
对于30%的数据,n,m<=100;
对于100%的数据,n,m<=1000;
保证k<=(r-l+1),序列中的数<=10^6。
解题思路
由于数据量不大(不超过1000个数),所以采用暴力方法,直接排序并输出第k大的数。又由于会进行多次查询,每次查询的区间不一定相同,所以每次查询时将指定区间复制到临时数组里,对该数组使用标准库的sort函数进行排序即可。
核心代码
void KMax(int *a, int l, int r, int k){int len = r - l + 1;int *t = new int[len];for (int j = 0; j < len; j++){t[j] = a[l + j - 1];}sort(t, t + len);cout << t[len - k] << endl;delete[] t;}void TestKMax(){int m, n;cin >> n;int *a = new int[n];for (int i = 0; i < n; i++){cin >> a[i];}cin >> m;for (int i = 0; i < m; i++){int l, r, k;cin >> l >> r >> k;KMax(a, l, r, k);}delete[] a;}
注释
读入整个序列到数组a,每次把第l到r个元素复制到临时数组t中并排序,然后输出第k大的数。
标准库的sort函数包含在<algorithm>头文件中。
0 0
- 算法训练(1)——区间k大数查询
- 算法训练 1 区间k大数查询
- 2016蓝桥杯算法训练——区间k大数查询
- 16蓝桥杯算法训练—区间k大数查询
- 蓝桥杯-算法训练之区间K大数查询——ALGO-1
- 蓝桥杯ALGO-1——算法训练 区间k大数查询
- 算法训练 区间k大数查询
- 算法训练 区间k大数查询
- 蓝桥杯 算法训练 区间k大数查询
- 算法训练 区间k大数查询
- 算法训练 区间k大数查询
- 算法训练 区间k大数查询
- 算法训练 区间k大数查询
- 算法训练 区间k大数查询
- 算法训练 区间k大数查询
- 算法训练 区间k大数查询
- 【算法训练】区间k大数查询
- 蓝桥杯 算法训练 区间k大数查询
- iOS系统各版本发布日期整理
- 51NOD1153 选择子序列 【分治法+RMQ水一发】
- “瓜皮从零建站”第1话--什么是网站?
- hadoop2.5.2学习10--MR之统计每月最高三个温度01
- 进入保护模式的第一个程序
- 算法训练(1)——区间k大数查询
- 欢迎使用CSDN-markdown编辑器
- 每天一个linux命令:whereis 命令
- c——语句
- Qt加载本地字体 .ttc或.ttf
- Atitit sift匹配度计算 图片连线 oepncv sift java匹配
- POJ - 2366 Sacrament of the sum 二分查找
- HDU 5918 Sequence I (2016长春区域赛, KMP)
- uva 10564Paths through the Hourglass