蓝桥杯---区间K大数查询

问题描述
给定一个序列,每次询问序列中第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]);
		}*/
		
		
	}
	

}

猜你喜欢

转载自blog.csdn.net/qq_39487875/article/details/86544704