Update solution for 가장_긴_증가하는_부분_수열 w/ id 19931124
Time: 0ms MemUsage: 13028KB
This commit is contained in:
58
baekjoon/가장_긴_증가하는_부분_수열/solution_19931124.rs
Normal file
58
baekjoon/가장_긴_증가하는_부분_수열/solution_19931124.rs
Normal file
@@ -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<u32>, n: u32) -> Option<usize>{
|
||||
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<u32> = 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());
|
||||
}
|
||||
Reference in New Issue
Block a user