题目
问题描述
给定一个序列,每次询问序列中第 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 A {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt(); //n
int[] a=new int[n];
for(int i=0;i<n;i++){ //n个正整数
a[i]=scanner.nextInt();
}
for (int i = 1; i < n; ++i) {
int temp = a[i];
int j = 0;
for (j = i-1; j >= 0; j--) {
if (a[j] > temp) {
a[j+1] = a[j];
}else {
break;
}
}
a[j+1] = temp;
}
int m=scanner.nextInt(); //m
int[] l,r,k=new int[m];
for(int i=0;i<m;i++){ //m个 l,r,k
l[i]=scanner.nextInt();
r[i]=scanner.nextInt();
k[i]=scanner.nextInt();
}
for(int i=0;i<m;i++){ //输出m个 第k大的数
for(int j=0;j<n;j++){
if(r[i]==a[j]){
System.out.println(a[j-b[i][2]+1]);
}
}
}
scanner.close();
}
}
运行结果: