From 6949d34a9fdb9dfe050a66ff0cc7e26fa8c404af Mon Sep 17 00:00:00 2001 From: Myeongseon Choi Date: Thu, 29 Aug 2024 16:22:18 +0900 Subject: [PATCH] =?UTF-8?q?Update=20solution=20for=20=EA=B0=80=EC=9E=A5=5F?= =?UTF-8?q?=EA=B8=B4=5F=EC=A6=9D=EA=B0=80=ED=95=98=EB=8A=94=5F=EB=B6=80?= =?UTF-8?q?=EB=B6=84=5F=EC=88=98=EC=97=B4=20w/=20id=2019931124=20Time:=200?= =?UTF-8?q?ms=20MemUsage:=2013028KB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solution_19931124.rs | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 baekjoon/가장_긴_증가하는_부분_수열/solution_19931124.rs diff --git a/baekjoon/가장_긴_증가하는_부분_수열/solution_19931124.rs b/baekjoon/가장_긴_증가하는_부분_수열/solution_19931124.rs new file mode 100644 index 0000000..ad48870 --- /dev/null +++ b/baekjoon/가장_긴_증가하는_부분_수열/solution_19931124.rs @@ -0,0 +1,58 @@ + +macro_rules! parse_list { + ($t: ty) => ({ + let mut line = String::new(); + std::io::stdin().read_line(&mut line).unwrap(); + let list: Vec<$t> = line.split_whitespace() + .map(|w| w.parse::<$t>().unwrap()).collect(); + list + }) +} + +macro_rules! parse_line { + ($($t: ty),+) => ({ + let mut line = String::new(); + std::io::stdin().read_line(&mut line).unwrap(); + let mut iter = line.split_whitespace(); + ($(iter.next().unwrap().parse::<$t>().unwrap()),+) + }) +} + + +fn binary_search(min_end: &Vec, n: u32) -> Option{ + if min_end.len() == 0 { + return None; + } + + let (mut l, mut r) : (usize, usize) = (0, min_end.len() - 1); + while l + 1 < r{ + let mid = (l + r) / 2; + if n <= min_end[mid]{ + r = mid; + } + else{ + l = mid; + } + } + if n <= min_end[l]{ + return Some(l); + } + else if n <= min_end[r]{ + return Some(r); + } + return None; +} + +fn main(){ + let _n = parse_line!(usize); + let seq = parse_list!(u32); + + let mut min_end : Vec = Vec::new(); + for &x in seq.iter(){ + match binary_search(&min_end, x){ + Some(i) => {min_end[i] = x;}, + None => {min_end.push(x);}, + } + } + println!("{}", min_end.len()); +}