ソートによる高速化まとめ (paizaランク B 相当)
ポイントは、get(k): 数列 A の中から大きい順で k 番目の値を出力するとき、
元の数列Aを変更しないように.slice()
でコピーを作り、
.sort((a, b) => b - a)
で大きい順に並べ替えているところです。
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);
//クエリに答えていく
for (let i = 1; i <= Q; i++) {
//クエリの種類 query, k 番目の値, 変更する値 x
const[query, k, x] = lines[1 + i].split(" ")
//k,xだけを数値変換
.map((v, j) => j === 0 ? v : Number(v));
if (query === "update") {
//列の先頭から k 番目の値を x に変更
A[k - 1] = x;
} else if (query === "get") {
//数列 A の中から大きい順で k 番目の値を出力
//元の数列Aを変更しないように.slice()を入れています
console.log(A.slice().sort((a, b) => b - a)[k - 1]);
}
}