藍橋杯 演算法訓練 區間k大數查詢 (Java解題)
問題描述
給定一個序列,每次詢問序列中第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
1 2 3 4 5
2
1 5 2
2 3 2
樣例輸出
4
2
2
資料規模與約定
對於30%的資料,n,m<=100;
對於100%的資料,n,m<=1000;
保證k<=(r-l+1),序列中的數<=106。
程式碼:
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int n;
Scanner x = new Scanner(System.in);
n = x.nextInt();
int s[] = new int[n + 1];//序列中整數
int t[] = new int[n + 1];//進行排序互換操作的整數
for (int i = 1; i <= n; i++) {
s[i] = x.nextInt();
}
int m = x.nextInt();
int s1[] = new int[m];// 儲存最後結果
int l, r, k, d = 0, tt;
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++)
t[j] = s[j];//將s陣列的值賦給t,對t陣列進行操作
l = x.nextInt();
r = x.nextInt();
k = x.nextInt();
for (int p = l; p <= r; p++) {//排序
for (int q = l; q <= r - 1; q++) {
if (t[q] < t[q + 1]) {
tt = t[q];
t[q] = t[q + 1];
t[q + 1] = tt;
}
}
}
s1[d] = t[k + l - 1];
d++;
}
for (int i = 0; i < d; i++)
System.out.println(s1[i]);
}
}
相關文章
- 藍橋杯 演算法訓練 K好數(Java解題)演算法Java
- 藍橋杯 (java)演算法訓練 數對Java演算法
- 藍橋杯—演算法訓練演算法
- 藍橋杯--演算法訓練演算法
- 藍橋杯-k倍區間
- 藍橋杯:基礎練習 查詢整數
- [藍橋杯][演算法訓練VIP]方格取數演算法
- [Java] 藍橋杯ALGO-117 演算法訓練 友好數JavaGo演算法
- 藍橋杯 演算法訓練 素因子去重(Java)演算法Java
- 演算法訓練 字首表示式 (藍橋杯)演算法
- 藍橋杯-連號區間數
- C++實現 藍橋杯 k倍區間C++
- 藍橋杯——查詢的妙趣
- 藍橋杯:入門訓練 Fibonacci數列
- 藍橋杯 演算法訓練 操作格子 (線段樹)演算法
- [藍橋杯][演算法提高VIP]大數加法演算法
- 藍橋杯練習試題程式碼及講解
- 藍橋杯試題 基礎練習 特殊迴文數
- 藍橋杯訓練--母牛的故事(很清晰的思路)
- 藍橋杯練習系統題目集
- 藍橋杯 演算法提高 P0102(Java解題)演算法Java
- 藍橋杯真題
- 藍橋杯 【基礎練習】 特殊迴文數
- 藍橋杯之特殊迴文數JAVAJava
- 藍橋杯演算法提高——字串匹配(Java)演算法字串匹配Java
- Java藍橋杯14年第五題Java
- Java實現 藍橋杯 演算法提高 八數碼(BFS)Java演算法
- 藍橋杯-帶分數
- 閒聊藍橋杯JAVA - 生成迴文數Java
- 藍橋杯-座次問題
- 藍橋杯-日期問題
- 藍橋杯-波動數列
- 藍橋杯-合併數列
- 【每週例題】藍橋杯 C++ 多數C++
- K大數查詢
- 藍橋杯大賽——驅動程式
- [藍橋杯][演算法提高VIP]上帝造題五分鐘 (線段樹+區間最小值)演算法
- 2013藍橋杯題解c++A組C++