问题描述
给定一个序列,每次询问序列中第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
import java.util.Scanner;
public class Main{
//对一个一维数组进行排序
static int[] sort(int[] arr, int sta , int end){
for(int count = 0;count<end-sta;count++ ){
for(int j = sta-1;j<end-count-1;j++){
if(arr[j]<arr[j+1]){
int temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
}
return arr;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入数组长度");
int n = sc.nextInt();// 数组长度
int[] arr = new int[n];
// 存数
System.out.println("输入数据");
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
System.out.println("输入查询次数");
int m = sc.nextInt();// 查询次数
int[][] req = new int[m][3];//存放查询序列的二维数组
for(int i = 0;i<m;i++){
for(int j=0;j<3;j++){
req[i][j]=sc.nextInt();
}
}
/* //输出查询序列
System.out.println("输出查询序列:");
for(int i=0;i<m;i++){
for(int j = 0;j<3;j++)
System.out.println(req[i][j]);
}
*/
int[] result = new int[n];
for(int count=0;count<m;count++){
int[] a = new int[n];
a = arr.clone();
System.out.print("sta="+req[count][0]+" ");
System.out.print("end="+req[count][1]+" ");
System.out.println("k="+req[count][2]);
int[] q=sort(a,req[count][0],req[count][1]);
System.out.println("输出排序后的数组");
for(int d = 0;d<n;d++){
System.out.println(q[d]);
}
result[count]=q[req[count][0]-1+req[count][2]-1];
System.out.println("输出结果");
System.out.println(result[count]);
}
/* System.out.println("输出result结果集:");
for(int i=0;i<m;i++){
System.out.println(result[i]);
}*/
}
}