LoginSignup
0
0

More than 1 year has passed since last update.

paizaラーニング レベルアップ問題集 ソートメニュー応用編 JavaScript ソートによる高速化まとめ

Last updated at Posted at 2022-09-23

ソートによる高速化まとめ (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]);
    }                        
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0