From 0684e380568b352829c57b83592696d421847c3a Mon Sep 17 00:00:00 2001 From: bouzuya Date: Wed, 20 Dec 2023 22:59:15 +0900 Subject: [PATCH] abc330 e --- .../contests/abc330/src/bin/e.rs | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/cargo-atcoder-1.70.0/contests/abc330/src/bin/e.rs b/cargo-atcoder-1.70.0/contests/abc330/src/bin/e.rs index 2a9506c8..c9329cd3 100644 --- a/cargo-atcoder-1.70.0/contests/abc330/src/bin/e.rs +++ b/cargo-atcoder-1.70.0/contests/abc330/src/bin/e.rs @@ -1,10 +1,35 @@ +use std::collections::{BTreeSet, HashMap}; + use proconio::{input, marker::Usize1}; fn main() { input! { n: usize, - a: [Usize1; n], + q: usize, + mut a: [usize; n], + ix: [(Usize1, usize); q] }; - let ans = n - a.len(); - println!("{}", ans); + + let mut used = HashMap::new(); + let mut unused = (0..=2 * 100_000).collect::>(); + for a_i in a.iter().copied() { + *used.entry(a_i).or_insert(0) += 1; + unused.remove(&a_i); + } + + for (i, x) in ix { + let count = used.get_mut(&a[i]).unwrap(); + *count -= 1; + if *count == 0 { + used.remove(&a[i]); + unused.insert(a[i]); + } + + a[i] = x; + *used.entry(x).or_insert(0) += 1; + unused.remove(&x); + + let mex = unused.iter().next().unwrap(); + println!("{}", mex); + } }