区间第K大数
来源:互联网 发布:雅马哈授权网络经销商 编辑:程序博客网 时间:2024/05/21 14:56
问题描述
给定一个序列,每次询问序列中第 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
样例输出
42
数据规模与约定
对于 30%的数据, n,m<=100;
对于 100%的数据, n,m<=1000;
保证 k<=(r-l+1) ,序列中的数<=106。
#include<stdio.h>#include<stdlib.h>void Copy(int *a, int *tmp, int l, int n){ int i;for(i=0; i<n; i++)tmp[i] = a[l++];}void QuickSort(int *tmp, int low, int high){int value, i, j;if(low < high){value = tmp[low], i = low, j = high - 1;while(i < j){while(tmp[j] >= value && i < j)j--;tmp[i] = tmp[j];while(tmp[i] <= value && i < j)i++;tmp[j] = tmp[i];}tmp[i] = value;QuickSort(tmp, low, i-1);QuickSort(tmp, i+1, high);}}void Find_k(int *tmp, int n, int k){while(k--)n--;printf("%d\n", tmp[n]);}int main(){int n, m, i, l, r, k, *a = NULL, *tmp;scanf("%d", &n);a = (int *)malloc(sizeof(int) * n);for(i=0; i<n; i++)scanf("%d", &a[i]);scanf("%d", &m);while(m--){scanf("%d%d%d", &l, &r, &k);l--; r--;//l和r代表第几个数,分别-1就成了数组下标n = r - l + 1;//tmp的长度tmp = (int *)malloc(sizeof(int) * n);Copy(a, tmp, l, n);QuickSort(tmp, 0, n);Find_k(tmp, n, k);}return 0;}
0 0
- 区间第K大数
- 区间第K大数
- 静态区间第k大数
- [hdu2665 Kth number]区间第k大数
- 区间K大数查询
- 区间K大数查询
- 区间k大数查询
- 区间K大数查询
- 区间k大数查询
- 区间K大数
- 区间k大数查询
- 区间k大数查询
- 区间k大数查询
- 区间k大数查询
- 区间k大数查询
- 区间K大数查询
- 区间k大数查询
- 区间K大数查询
- putty工具来远程访问
- 【转发】关于Java性能的9个谬论
- VC++ data type: wchar_t v.s. unsigned short and compiler option /Zc:wchar_t
- 内存文件映射
- Git push 总结
- 区间第K大数
- Spring学习 RMI
- 【JSP开发】JSP常用标签介绍
- 图---邻接表(建立,深度遍历,广度遍历)
- R语言选择导入文本数据部分字段
- 把TextView中的文字添加阴影效果及Style的使用
- mysql 搜索当天数据
- html5 canvas 详细使用教程
- bool? 什么意思 bool? isTrue;表示 bool isTrue = null ; 定义并给变量赋值为null;