题解 | #合唱队#

合唱队

https://www.nowcoder.com/practice/6d9d69e3898f45169a441632b325c7b4

use std::io::{self, *};

fn maxLeft(q: &Vec<usize>, res: &mut Vec<usize>) {
    let mut temp = vec![usize::MAX; q.len()];
    let mut pos = 0;
    for i in q {
        match temp.as_slice().binary_search(i) {
            Ok(p) => pos = p,
            Err(p) => pos = p,
        }
        temp[pos] = *i;
        res.push(pos)
    }
}

fn main() {
    let stdin = io::stdin();
    let mut line = String::new();
    stdin.read_line(&mut line);
    let n = line.trim().parse::<usize>().unwrap();
    line.clear();
    stdin.read_line(&mut line);
    let mut q: Vec<usize> = line.split(" ").map(|i| i.trim().parse::<usize>().unwrap()).collect();
    let mut ml = vec![];
    let mut mr = vec![];

    maxLeft(&q, &mut ml);

    q.reverse();
    maxLeft(&q, &mut mr);
    mr.reverse();
    let max = mr.iter().zip(ml.iter()).max_by_key(|i| *(i.0) + *(i.1)).unwrap();
    println!("{}", n - max.0 - max.1 - 1)
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务