区間探索 1 (paizaランク B 相当)
解答例
a に x 以上の要素は必ず 1 つ以上存在するので、最大長の最小値は1で、これを初期値とします。
lとrの初期値は0未満になるようにします。aのインデックにならないようにです。aのインデックになると、r-l+1=0の計算で、長さが求まってしまいます。
aの要素がx以上の時は、lが初期値だったら、更新します。rを伸ばします。最後のiだったら、最大の長さを求めます。
aの要素がx未満の時は、最大の長さを求めて、lとrをリセットします。
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");
const [n, x] = lines[0].split(" ").map(Number);
const a = lines[1].split(" ").map(Number);
let max = 0;//最大長
let [l, r] = [-1, -1];//lとrの初期値。r-l+1=1なるように。aのインデックスにならないように0未満の値にする。
for (let i = 0; i < n; i++) {
if (a[i] >= x) {
//lが初期値のままだったら更新
if (l < 0) {
l = i;
}
//rは伸ばす
r = i;
//最後だったら、長さ判定する
if (i === n - 1) {
max = Math.max(max, r - l + 1);
}
} else {
max = Math.max(max, r - l + 1);
[l, r] = [-1, -1];//l,rリセット
}
}
console.log(max);