區間數k大數查詢
阿新 • • 發佈:2021-07-24
題目
問題描述 給定一個序列,每次詢問序列中第 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(); int[] a=new int[n]; for(int i=0;i<n;i++){ 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(); int[] l,r,k=new int[m]; for(int i=0;i<m;i++){ l[i]=scanner.nextInt(); r[i]=scanner.nextInt(); k[i]=scanner.nextInt(); } for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ if(r[i]==a[j]){ System.out.println(a[j-b[i][2]+1]); } } } scanner.close(); } }
執行結果: