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 |
|
|
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 |