Submission #3013160


Source Code Expand

#![allow(unused_imports)]
#![allow(non_snake_case)]

use procon::*;
use std::cmp::{max, min};
use std::collections::*;
use std::ops::*;
use std::*;

fn solve(K: usize, Q: usize, A: Vec<i64>) -> i64 {
    let mut score = 1_000_000_000;

    for y in A.iter().cloned() {
        // 最良のスコア X - Y が Y >= y で与えられるケースだけ考える。
        // y 未満の要素を含む部分列は選択できない。
        // y 未満の要素で数列を切断して、各部分を島と呼ぶ。
        // 各島について操作を行うとき、長さ K 以上なら、必ず最小値を消すことができる。
        // 各操作において、長さ K 以上の島に含まれる要素の中で最小のもの、を消すのが常に最善。
        // X が最小化されてベスト。

        let mut islands = Vec::new();
        let mut island = Vec::new();
        for a in A.iter().cloned() {
            if a < y {
                if island.len() >= K {
                    islands.push(island);
                }
                island = Vec::new();
                continue;
            }

            island.push(a);
        }

        if island.len() >= K {
            islands.push(island);
        }

        //println!("y={} {:?}", y, islands);

        // Q 番目に小さい数を探す
        let mut cand = Vec::new();

        // 長さ K 未満の島からはドロップできないので、小さいものから (N-K+1) 個しか使えない
        for mut island in islands {
            island.sort();
            for i in 0..(island.len() + 1 - K) {
                cand.push(island[i]);
            }
        }

        if cand.len() < Q {
            // Y >= y になる操作が存在しない
            continue;
        }

        cand.sort();

        let y = cand[0];
        let x = cand[Q - 1];

        score = min(score, x - y);
    }
    score
}

pub fn main() {
    let words = read_words::<usize>();
    let (_, K, Q) = (words[0], words[1], words[2]);
    let A = read_words::<i64>();

    println!("{}", solve(K, Q, A));
    return;
}

pub mod procon {
    use std;
    use std::collections::*;
    use std::io;
    use std::mem;
    use std::str::FromStr;

    pub fn read_line() -> String {
        let mut buf = String::new();
        io::stdin().read_line(&mut buf).unwrap();
        buf.trim_right().to_owned()
    }

    pub fn read_words<T>() -> Vec<T>
    where
        T: std::str::FromStr,
        T::Err: std::fmt::Debug,
    {
        let mut buf = String::new();
        io::stdin().read_line(&mut buf).unwrap();
        buf.split_whitespace()
            .map(|word| T::from_str(word).unwrap())
            .collect()
    }

    pub fn read_vec(len: usize) -> Vec<String> {
        let mut vec = Vec::new();
        while vec.len() < len {
            let line = read_line();
            for word in line.split_whitespace() {
                vec.push(word.to_owned());
            }
        }
        assert!(vec.len() == len);
        vec
    }
}

#[cfg(test)]
pub mod tests {
    use super::*;

    #[test]
    pub fn test_case1() {
        assert_eq!(1, solve(3, 2, vec![4, 3, 1, 5, 2]));
    }

    #[test]
    pub fn test_case2() {
        assert_eq!(7, solve(1, 6, vec![1, 1, 2, 3, 5, 8, 13, 21, 34, 55]));
    }

    #[test]
    pub fn test_case3() {
        assert_eq!(
            451211184,
            solve(
                7,
                5,
                vec![
                    24979445, 861648772, 623690081, 433933447, 476190629, 262703497, 211047202,
                    971407775, 628894325, 731963982, 822804784,
                ]
            )
        );
    }

}

Submission Info

Submission Time
Task E - Range Minimum Queries
User vain0
Language Rust (1.15.1)
Score 600
Code Size 3829 Byte
Status AC
Exec Time 111 ms
Memory 4352 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 3
AC × 54
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
All sample_01.txt, sample_02.txt, sample_03.txt, sample_01.txt, sample_02.txt, sample_03.txt, subtask_1_01.txt, subtask_1_02.txt, subtask_1_03.txt, subtask_1_04.txt, subtask_1_05.txt, subtask_1_06.txt, subtask_1_07.txt, subtask_1_08.txt, subtask_1_09.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_13.txt, subtask_1_14.txt, subtask_1_15.txt, subtask_1_16.txt, subtask_1_17.txt, subtask_1_18.txt, subtask_1_19.txt, subtask_1_20.txt, subtask_1_21.txt, subtask_1_22.txt, subtask_1_23.txt, subtask_1_24.txt, subtask_1_25.txt, subtask_1_26.txt, subtask_1_27.txt, subtask_1_28.txt, subtask_1_29.txt, subtask_1_30.txt, subtask_1_31.txt, subtask_1_32.txt, subtask_1_33.txt, subtask_1_34.txt, subtask_1_35.txt, subtask_1_36.txt, subtask_1_37.txt, subtask_1_38.txt, subtask_1_39.txt, subtask_1_40.txt, subtask_1_41.txt, subtask_1_42.txt, subtask_1_43.txt, subtask_1_44.txt, subtask_1_45.txt, subtask_1_46.txt, subtask_1_47.txt, subtask_1_48.txt
Case Name Status Exec Time Memory
sample_01.txt AC 2 ms 4352 KB
sample_02.txt AC 2 ms 4352 KB
sample_03.txt AC 2 ms 4352 KB
subtask_1_01.txt AC 2 ms 4352 KB
subtask_1_02.txt AC 2 ms 4352 KB
subtask_1_03.txt AC 54 ms 4352 KB
subtask_1_04.txt AC 2 ms 4352 KB
subtask_1_05.txt AC 2 ms 4352 KB
subtask_1_06.txt AC 4 ms 4352 KB
subtask_1_07.txt AC 38 ms 4352 KB
subtask_1_08.txt AC 41 ms 4352 KB
subtask_1_09.txt AC 10 ms 4352 KB
subtask_1_10.txt AC 14 ms 4352 KB
subtask_1_11.txt AC 51 ms 4352 KB
subtask_1_12.txt AC 107 ms 4352 KB
subtask_1_13.txt AC 81 ms 4352 KB
subtask_1_14.txt AC 47 ms 4352 KB
subtask_1_15.txt AC 54 ms 4352 KB
subtask_1_16.txt AC 48 ms 4352 KB
subtask_1_17.txt AC 32 ms 4352 KB
subtask_1_18.txt AC 41 ms 4352 KB
subtask_1_19.txt AC 38 ms 4352 KB
subtask_1_20.txt AC 35 ms 4352 KB
subtask_1_21.txt AC 40 ms 4352 KB
subtask_1_22.txt AC 30 ms 4352 KB
subtask_1_23.txt AC 59 ms 4352 KB
subtask_1_24.txt AC 111 ms 4352 KB
subtask_1_25.txt AC 67 ms 4352 KB
subtask_1_26.txt AC 50 ms 4352 KB
subtask_1_27.txt AC 100 ms 4352 KB
subtask_1_28.txt AC 49 ms 4352 KB
subtask_1_29.txt AC 19 ms 4352 KB
subtask_1_30.txt AC 30 ms 4352 KB
subtask_1_31.txt AC 49 ms 4352 KB
subtask_1_32.txt AC 52 ms 4352 KB
subtask_1_33.txt AC 39 ms 4352 KB
subtask_1_34.txt AC 39 ms 4352 KB
subtask_1_35.txt AC 40 ms 4352 KB
subtask_1_36.txt AC 39 ms 4352 KB
subtask_1_37.txt AC 23 ms 4352 KB
subtask_1_38.txt AC 12 ms 4352 KB
subtask_1_39.txt AC 14 ms 4352 KB
subtask_1_40.txt AC 27 ms 4352 KB
subtask_1_41.txt AC 42 ms 4352 KB
subtask_1_42.txt AC 22 ms 4352 KB
subtask_1_43.txt AC 36 ms 4352 KB
subtask_1_44.txt AC 37 ms 4352 KB
subtask_1_45.txt AC 14 ms 4352 KB
subtask_1_46.txt AC 22 ms 4352 KB
subtask_1_47.txt AC 38 ms 4352 KB
subtask_1_48.txt AC 39 ms 4352 KB