complete 13334.rs 20207.rs
This commit is contained in:
69
storage/zeta/rs/completed/13334.rs
Normal file
69
storage/zeta/rs/completed/13334.rs
Normal file
@@ -0,0 +1,69 @@
|
||||
use std::{
|
||||
cmp::{max, Reverse},
|
||||
collections::BinaryHeap,
|
||||
i32,
|
||||
io::{stdin, Read},
|
||||
};
|
||||
|
||||
fn main() {
|
||||
let mut buffer = Vec::new();
|
||||
|
||||
stdin().read_to_end(&mut buffer).unwrap();
|
||||
let mut tokens = buffer.split(|&b| b <= b' ');
|
||||
let mut next_i32 = || {
|
||||
tokens.find(|s| !s.is_empty()).map(|s| {
|
||||
let mut res = 0i32;
|
||||
let mut neg = false;
|
||||
let mut start = 0;
|
||||
if s[0] == b'-' {
|
||||
neg = true;
|
||||
start = 1;
|
||||
}
|
||||
for i in start..s.len() {
|
||||
res = res * 10 + (s[i] - b'0') as i32;
|
||||
}
|
||||
if neg {
|
||||
-res
|
||||
} else {
|
||||
res
|
||||
}
|
||||
})
|
||||
};
|
||||
|
||||
let n = next_i32().unwrap();
|
||||
|
||||
let mut commute_infos = (0..n)
|
||||
.map(|_| {
|
||||
let (a, b) = (next_i32().unwrap(), next_i32().unwrap());
|
||||
if b > a {
|
||||
(a, b)
|
||||
} else {
|
||||
(b, a)
|
||||
}
|
||||
})
|
||||
.collect::<Vec<(i32, i32)>>();
|
||||
|
||||
let d = next_i32().unwrap();
|
||||
commute_infos.sort_unstable_by_key(|&(_, b)| b);
|
||||
let mut max_benefit = 0;
|
||||
let mut deq: BinaryHeap<Reverse<i32>> = BinaryHeap::new();
|
||||
|
||||
for &(h, o) in commute_infos.iter() {
|
||||
if o - h > d {
|
||||
continue;
|
||||
}
|
||||
deq.push(Reverse(h));
|
||||
|
||||
while let Some(ch) = deq.peek() {
|
||||
if ch.0 < o - d {
|
||||
deq.pop();
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
max_benefit = max(max_benefit, deq.len());
|
||||
}
|
||||
|
||||
println!("{}", max_benefit);
|
||||
}
|
||||
46
storage/zeta/rs/completed/20207.rs
Normal file
46
storage/zeta/rs/completed/20207.rs
Normal file
@@ -0,0 +1,46 @@
|
||||
use std::cmp::max;
|
||||
use std::io::{read_to_string, stdin};
|
||||
|
||||
fn main() {
|
||||
let temp = read_to_string(stdin()).unwrap();
|
||||
let mut iter = temp
|
||||
.split_ascii_whitespace()
|
||||
.map(|x| x.parse::<usize>().unwrap());
|
||||
|
||||
let n = iter.next().unwrap();
|
||||
|
||||
let mut schedules = (0..n)
|
||||
.map(|_| (iter.next().unwrap(), iter.next().unwrap()))
|
||||
.collect::<Vec<(usize, usize)>>();
|
||||
|
||||
schedules.sort_by_key(|x| x.0);
|
||||
|
||||
let mut calendar = vec![0usize; 366];
|
||||
for &(s, e) in schedules.iter() {
|
||||
for i in s..=e {
|
||||
calendar[i] += 1;
|
||||
}
|
||||
}
|
||||
|
||||
let mut local_max_height = 0;
|
||||
let mut starting = 0;
|
||||
let mut sheet_area = 0;
|
||||
for (i, &c) in calendar.iter().enumerate() {
|
||||
if c == 0 {
|
||||
sheet_area += (i - starting) * local_max_height;
|
||||
local_max_height = 0;
|
||||
} else {
|
||||
if local_max_height == 0 {
|
||||
starting = i;
|
||||
}
|
||||
|
||||
local_max_height = max(c, local_max_height);
|
||||
}
|
||||
}
|
||||
|
||||
if local_max_height > 0 {
|
||||
sheet_area += (366 - starting) * local_max_height;
|
||||
}
|
||||
|
||||
println!("{}", sheet_area);
|
||||
}
|
||||
Reference in New Issue
Block a user