Top - k (hard) (paizaランク C 相当)
JavaScriptで解いてみました。
a の k_i 番目に大きい値を、その都度、数列aの中から探していると時間がかかります。
先に数列a
を大きい順に並べ替えると、a
の k_i 番目に大きい値はa[k_i - 1]
で、一発で求まります。
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");
//数列の長さを表す整数 n, q
const [n, q] = lines[0].split(" ").map(Number);
//数列 a
const a = lines[1].split(" ").map(Number);
//数列 k
const k = lines[2].split(" ").map(Number);
//aを降順にソート
a.sort((a, b) => b - a);
//1 以上 q 以下の各 i について、
for (let i = 0; i < q; i++) {
//a の k_i 番目に大きい値をそれぞれ求め、改行区切りで出力
console.log(a[k[i] - 1]);
}