区间K大数
来源:互联网 发布:服务器托管数据安全 编辑:程序博客网 时间:2024/05/29 04:07
问题描述
给定一个序列,每次询问序列中第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),序列中的数<=106。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt(); // n个正数
int array[] = new int[n];
if (n <= 106) {
for (int i = 0; i < n; i++) {
array[i] = in.nextInt();
}
}
int m = in.nextInt(); // m表示1询问的个数
int array1[][] = new int[m][3]; // m行,每行三个数,表示l,r,k
for (int i = 0; i < m; i++) {
for (int j = 0; j < 3; j++) {
array1[i][j] = in.nextInt();
}
}
for (int i = 0; i < m; i++) {
int l = array1[i][0];
int r = array1[i][1];
int k = array1[i][2];
int num[] = new int[r - l + 1];
int l1 = l;
for (int j = 0; j < r - l + 1; j++) {
if (l1 <= r) {
num[j] = array[l1 - 1];
l1++;
}
}
for (int j = 0; j < r - l + 1; j++) { // 将选中的l到r得数从大到小排好序
for (int a = 0; a <= j; a++) {
if (num[j] >= num[a]) {
int p = num[j];
num[j] = num[a];
num[a] = p;
}
}
}
if (k <= r - l + 1) {
System.out.println(num[k - 1]);
}
}
in.close();
}
}
0 0
- 区间K大数查询
- 区间K大数查询
- 区间k大数查询
- 区间K大数查询
- 区间k大数查询
- 区间K大数
- 区间第K大数
- 区间k大数查询
- 区间k大数查询
- 区间k大数查询
- 区间k大数查询
- 区间k大数查询
- 区间K大数查询
- 区间k大数查询
- 区间K大数查询
- 区间k大数查询
- 区间第K大数
- 区间K大数查询
- 题目1478:三角形的边
- Swift3.0和OC桥接方法
- vue2.0——v-bind
- Retrofit+okhttp3的简单封装实现网络请求和拦截
- webstorm修改文件,webpack-dev-server不会自动编译刷新
- 区间K大数
- word入门操作
- 企业实施ERP的先后步骤,你真的了解吗?
- Android-LayoutInflater中inflate方法两个参数和三个参数的区别
- 功能总结之车载方案AutoPlay功能总结
- iOS更改app的icons
- C++类模板分离模式
- reactnative "borderBottom" is not a valid style property.styleError
- Mybatis——Invalid bound statement (not found)-Could not find result map java.lang.Integer