Module d

Expand description

ยงABC 352 D - Permutation Subsequence

refs: https://atcoder.jp/contests/abc352/tasks/abc352_d

use std::collections::BTreeSet;

use proconio::input;

fn main() {
    input! {
        n: usize, k: usize,
        p: [usize; n],
    }

    let mut idx = vec![0; n];

    for (i, pi) in p.iter().enumerate() {
        idx[pi - 1] = i;
    }

    let mut set = BTreeSet::new();

    for i in idx.iter().take(k) {
        set.insert(*i);
    }

    let mut ans = diff(&set);

    for i in 1..=(n - k) {
        set.remove(&idx[i - 1]);
        set.insert(idx[i + k - 1]);
        ans = ans.min(diff(&set));
    }

    println!("{ans}");
}

fn diff(set: &BTreeSet<usize>) -> usize {
    set.last().expect("cannot be empty") - set.first().expect("cannot be empty")
}