概要
とりあえずBinary Searchすればいい。そうすれば計算量は \(\symscr{O}(Q\ln N)\) になる。 \(\ln\) じゃなくて \(\log_{2}\) だろうがという文句に対しては、定数倍してるだけだろうがという返答を投げつけますね。
use std::cmp;
use proconio::input;
fn main() {
input! {
: usize,
nmut a: [usize; n],
: usize,
q: [usize; q],
b}
.sort();
a
for i in b.clone() {
let ans = cmp::min(
cmp::min(a.len() as isize - 1, binary_search(&a, i) as isize)) as usize] as isize
(a[(- i as isize)
.abs(),
cmp::max(0, binary_search(&a, i) as isize - 1)) as usize] as isize - i as isize)
(a[(.abs(),
;
)println!("{}", ans);
}
}
fn binary_search(a: &[usize], b: usize) -> usize {
let mut left = 0;
let mut right = a.len();
while left < right {
let mid = (left + right) / 2;
if a[mid] == b {
return mid;
} else if a[mid] < b {
= mid + 1;
left } else {
= mid;
right }
}
left}
見たらわかると思いますが、マジで競プロにRustは合わないっすね。真剣にNimに移行することを考えるレベルで。
でも、私みたいな頑固なやつは何があってもRustを使い続けようとするんだろうなぁ。