Advertisement
3th1ca14aX0r

Untitled

Jun 16th, 2025
280
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JSON 310.46 KB | Source Code | 0 0
  1. {"lang": "Rust", "source_code": "use std::{\n    io::{self, BufRead},\n    str::FromStr,\n};\n\nstruct LineBuf(String);\n\nimpl LineBuf {\n    fn new() -> Self {\n        Self(String::new())\n    }\n\n    #[allow(dead_code)]\n    fn get(&self) -> &String {\n        &self.0\n    }\n\n    fn offer(&mut self) -> &mut String {\n        self.0.clear();\n        &mut self.0\n    }\n\n    fn parse_item<T>(s: &str) -> JoyResult<T>\n    where\n        T: FromStr,\n    {\n        s.parse().or_else(|_| Err(JoyError::ParseError))\n    }\n\n    #[allow(dead_code)]\n    fn parse<T>(&self) -> JoyResult<T>\n    where\n        T: FromStr,\n    {\n        Self::parse_item(self.0.trim())\n    }\n\n    #[allow(dead_code)]\n    fn parse2<T1, T2>(&self) -> JoyResult<(T1, T2)>\n    where\n        T1: FromStr,\n        T2: FromStr,\n    {\n        let mut it = self.0.split_whitespace();\n        let a = Self::parse_item(it.next().ok_or(JoyError::LineItemExhausted)?)?;\n        let b = Self::parse_item(it.next().ok_or(JoyError::LineItemExhausted)?)?;\n        Ok((a, b))\n    }\n\n    #[allow(dead_code)]\n    fn parse_vec<T>(&self) -> JoyResult<Vec<T>>\n    where\n        T: FromStr,\n    {\n        self.0\n            .split_whitespace()\n            .map(|s| s.parse().or(Err(JoyError::ParseError)))\n            .collect()\n    }\n}\n\n#[derive(Debug)]\nenum JoyError {\n    IOError(io::Error),\n    LineItemExhausted,\n    ParseError,\n}\n\ntype JoyResult<T> = Result<T, JoyError>;\n\nimpl std::convert::From<io::Error> for JoyError {\n    fn from(err: io::Error) -> Self {\n        Self::IOError(err)\n    }\n}\n\nfn main() -> JoyResult<()> {\n    let mut buf = LineBuf::new();\n    let stdin = io::stdin();\n    let mut stdin = stdin.lock();\n\n    stdin.read_line(buf.offer())?;\n    let t: usize = buf.parse()?;\n\n    for _ in 0..t {\n        stdin.read_line(buf.offer())?;\n        let (h, n): (i32, usize) = buf.parse2()?;\n\n        stdin.read_line(buf.offer())?;\n\n        let mut q: Vec<i32> = buf.parse_vec()?;\n        q.push(0);\n\n        assert_eq!(q.len(), n + 1);\n        assert_eq!(q[0], h);\n\n        // println!(\"{:?}\", q);\n\n        let mut i = 0;\n        let mut c = 0;\n        while i < n - 1 {\n            let now = q[i + 1] + 1;\n            if q[i + 2] == now - 2 {\n                i += 2;\n            } else {\n                // println!(\"q[i] = {}\", q[i]);\n                c += 1;\n                i += 1;\n            }\n        }\n\n        println!(\"{}\", c);\n    }\n\n    Ok(())\n}\n", "lang_cluster": "Rust", "compilation_error": true, "code_uid": "91c173e6f252216b1c96d13ead8ba5a5", "src_uid": "d0c50562764f2008045fe57e5da5de1c", "difficulty": 1600}
  2. {"lang": "Rust", "source_code": "use std::{\n    io::{self, BufRead},\n    str::FromStr,\n};\n\nstruct LineBuf(String);\n\nimpl LineBuf {\n    fn new() -> Self {\n        Self(String::new())\n    }\n\n    #[allow(dead_code)]\n    fn get(&self) -> &String {\n        &self.0\n    }\n\n    fn offer(&mut self) -> &mut String {\n        self.0.clear();\n        &mut self.0\n    }\n\n    fn parse_item<T>(s: &str) -> JoyResult<T>\n    where\n        T: FromStr,\n    {\n        s.parse().or_else(|_| Err(JoyError::ParseError))\n    }\n\n    #[allow(dead_code)]\n    fn parse<T>(&self) -> JoyResult<T>\n    where\n        T: FromStr,\n    {\n        Self::parse_item(self.0.trim())\n    }\n\n    #[allow(dead_code)]\n    fn parse2<T1, T2>(&self) -> JoyResult<(T1, T2)>\n    where\n        T1: FromStr,\n        T2: FromStr,\n    {\n        let mut it = self.0.split_whitespace();\n        let a = Self::parse_item(it.next().ok_or(JoyError::LineItemExhausted)?)?;\n        let b = Self::parse_item(it.next().ok_or(JoyError::LineItemExhausted)?)?;\n        Ok((a, b))\n    }\n\n    #[allow(dead_code)]\n    fn parse_vec<T>(&self) -> JoyResult<Vec<T>>\n    where\n        T: FromStr,\n    {\n        self.0\n            .split_whitespace()\n            .map(|s| s.parse().or(Err(JoyError::ParseError)))\n            .collect()\n    }\n}\n\n#[derive(Debug)]\nenum JoyError {\n    IOError(io::Error),\n    LineItemExhausted,\n    ParseError,\n}\n\ntype JoyResult<T> = Result<T, JoyError>;\n\nimpl std::convert::From<io::Error> for JoyError {\n    fn from(err: io::Error) -> Self {\n        JoyError::IOError(err)\n    }\n}\n\nfn main() -> JoyResult<()> {\n    let mut buf = LineBuf::new();\n    let stdin = io::stdin();\n    let mut stdin = stdin.lock();\n\n    stdin.read_line(buf.offer())?;\n    let t: usize = buf.parse()?;\n\n    for _ in 0..t {\n        stdin.read_line(buf.offer())?;\n        let (h, n): (i32, usize) = buf.parse2()?;\n\n        stdin.read_line(buf.offer())?;\n\n        let mut q: Vec<i32> = buf.parse_vec()?;\n        q.push(0);\n\n        assert_eq!(q.len(), n + 1);\n        assert_eq!(q[0], h);\n\n        // println!(\"{:?}\", q);\n\n        let mut i = 0;\n        let mut c = 0;\n        while i < n - 1 {\n            let now = q[i + 1] + 1;\n            if q[i + 2] == now - 2 {\n                i += 2;\n            } else {\n                // println!(\"q[i] = {}\", q[i]);\n                c += 1;\n                i += 1;\n            }\n        }\n\n        println!(\"{}\", c);\n    }\n\n    Ok(())\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "70789e739b58d8e093081e204f804983", "src_uid": "d0c50562764f2008045fe57e5da5de1c", "difficulty": 1600}
  3. {"lang": "Rust", "source_code": "pub trait Readable {\n    type Output;\n    fn words_count() -> usize;\n    fn read_words(words: &[&str]) -> Result<Self::Output, String>;\n}\n#[macro_export]\nmacro_rules! readable {\n    ( $ t : ty , $ words_count : expr , |$ words : ident | $ read_words : expr ) => {\n        impl Readable for $t {\n            type Output = $t;\n            fn words_count() -> usize {\n                $words_count\n            }\n            fn read_words($words: &[&str]) -> Result<$t, String> {\n                Ok($read_words)\n            }\n        }\n    };\n}\nreadable!((), 1, |_ss| ());\nreadable!(String, 1, |ss| ss[0].to_string());\nimpl Readable for char {\n    type Output = char;\n    fn words_count() -> usize {\n        1\n    }\n    fn read_words(words: &[&str]) -> Result<char, String> {\n        let chars: Vec<char> = words[0].chars().collect();\n        if chars.len() == 1 {\n            Ok(chars[0])\n        } else {\n            Err(format!(\"cannot parse `{}` as a char\", words[0]))\n        }\n    }\n}\npub struct Chars();\nimpl Readable for Chars {\n    type Output = Vec<char>;\n    fn words_count() -> usize {\n        1\n    }\n    fn read_words(words: &[&str]) -> Result<Vec<char>, String> {\n        Ok(words[0].chars().collect())\n    }\n}\nmacro_rules ! impl_readable_for_ints { ( $ ( $ t : ty ) * ) => { $ ( impl Readable for $ t { type Output = Self ; fn words_count ( ) -> usize { 1 } fn read_words ( words : & [ & str ] ) -> Result <$ t , String > { use std :: str :: FromStr ; <$ t >:: from_str ( words [ 0 ] ) . map_err ( | _ | { format ! ( \"cannot parse `{}` as {}\" , words [ 0 ] , stringify ! ( $ t ) ) } ) } } ) * } ; }\nimpl_readable_for_ints ! ( i8 u8 i16 u16 i32 u32 i64 u64 isize usize f32 f64 ) ;\nmacro_rules ! define_one_origin_int_types { ( $ new_t : ident $ int_t : ty ) => { # [ doc = \" Converts 1-origin integer into 0-origin when read from stdin.\" ] # [ doc = \"\" ] # [ doc = \" # Example\" ] # [ doc = \"\" ] # [ doc = \" ```no_run\" ] # [ doc = \" # #[macro_use] extern crate atcoder_snippets;\" ] # [ doc = \" # use atcoder_snippets::read::*;\" ] # [ doc = \" // Stdin: \\\"1\\\"\" ] # [ doc = \" read!(a = usize_);\" ] # [ doc = \" assert_eq!(a, 0);\" ] # [ doc = \" ```\" ] # [ allow ( non_camel_case_types ) ] pub struct $ new_t ; impl Readable for $ new_t { type Output = $ int_t ; fn words_count ( ) -> usize { 1 } fn read_words ( words : & [ & str ] ) -> Result < Self :: Output , String > { <$ int_t >:: read_words ( words ) . map ( | n | n - 1 ) } } } ; ( $ new_t : ident $ int_t : ty ; $ ( $ inner_new_t : ident $ inner_int_t : ty ) ;* ) => { define_one_origin_int_types ! ( $ new_t $ int_t ) ; define_one_origin_int_types ! ( $ ( $ inner_new_t $ inner_int_t ) ;* ) ; } ; }\ndefine_one_origin_int_types ! ( u8_ u8 ; u16_ u16 ; u32_ u32 ; u64_ u64 ; usize_ usize ) ;\nmacro_rules ! impl_readable_for_tuples { ( $ t : ident $ var : ident ) => ( ) ; ( $ t : ident $ var : ident ; $ ( $ inner_t : ident $ inner_var : ident ) ;* ) => { impl_readable_for_tuples ! ( $ ( $ inner_t $ inner_var ) ;* ) ; impl <$ t : Readable , $ ( $ inner_t : Readable ) ,*> Readable for ( $ t , $ ( $ inner_t ) ,* ) { type Output = ( <$ t >:: Output , $ ( <$ inner_t >:: Output ) ,* ) ; fn words_count ( ) -> usize { let mut n = <$ t >:: words_count ( ) ; $ ( n += <$ inner_t >:: words_count ( ) ; ) * n } # [ allow ( unused_assignments ) ] fn read_words ( words : & [ & str ] ) -> Result < Self :: Output , String > { let mut start = 0 ; let $ var = <$ t >:: read_words ( & words [ start .. start +<$ t >:: words_count ( ) ] ) ?; start += <$ t >:: words_count ( ) ; $ ( let $ inner_var = <$ inner_t >:: read_words ( & words [ start .. start +<$ inner_t >:: words_count ( ) ] ) ?; start += <$ inner_t >:: words_count ( ) ; ) * Ok ( ( $ var , $ ( $ inner_var ) ,* ) ) } } } ; }\nimpl_readable_for_tuples ! ( T8 x8 ; T7 x7 ; T6 x6 ; T5 x5 ; T4 x4 ; T3 x3 ; T2 x2 ; T1 x1 ) ;\npub trait ReadableFromLine {\n    type Output;\n    fn read_line(line: &str) -> Result<Self::Output, String>;\n}\nfn split_into_words(line: &str) -> Vec<&str> {\n    #[allow(deprecated)]\n    line.trim_right_matches('\\n').split_whitespace().collect()\n}\nimpl<T: Readable> ReadableFromLine for T {\n    type Output = T::Output;\n    fn read_line(line: &str) -> Result<T::Output, String> {\n        let words = split_into_words(line);\n        if words.len() != T::words_count() {\n            return Err(format!(\n                \"line `{}` has {} words, expected {}\",\n                line,\n                words.len(),\n                T::words_count()\n            ));\n        }\n        T::read_words(&words)\n    }\n}\nmacro_rules ! impl_readable_from_line_for_tuples_with_from_iterator { ( $ u : ident : $ ( + $ bound : path ) * => $ seq_in : ty , $ seq_out : ty ; $ t : ident $ var : ident ) => { impl <$ u : Readable > ReadableFromLine for $ seq_in where <$ u as Readable >:: Output : Sized $ ( + $ bound ) * { type Output = $ seq_out ; fn read_line ( line : & str ) -> Result <$ seq_out , String > { let n = $ u :: words_count ( ) ; let words = split_into_words ( line ) ; if words . len ( ) % n != 0 { return Err ( format ! ( \"line `{}` has {} words, expected multiple of {}\" , line , words . len ( ) , n ) ) ; } let mut result = Vec :: new ( ) ; for chunk in words . chunks ( n ) { match $ u :: read_words ( chunk ) { Ok ( v ) => result . push ( v ) , Err ( msg ) => { let flagment_msg = if n == 1 { format ! ( \"word {}\" , result . len ( ) ) } else { let l = result . len ( ) ; format ! ( \"words {}-{}\" , n * l + 1 , ( n + 1 ) * l ) } ; return Err ( format ! ( \"{} of line `{}`: {}\" , flagment_msg , line , msg ) ) ; } } } Ok ( result . into_iter ( ) . collect ( ) ) } } impl < T : Readable , $ u : Readable > ReadableFromLine for ( T , $ seq_in ) where <$ u as Readable >:: Output : Sized $ ( + $ bound ) * { type Output = ( T :: Output , $ seq_out ) ; fn read_line ( line : & str ) -> Result < Self :: Output , String > { let n = T :: words_count ( ) ; # [ allow ( deprecated ) ] let trimmed = line . trim_right_matches ( '\\n' ) ; let words_and_rest : Vec <& str > = trimmed . splitn ( n + 1 , ' ' ) . collect ( ) ; if words_and_rest . len ( ) < n { return Err ( format ! ( \"line `{}` has {} words, expected at least {}\" , line , words_and_rest . len ( ) , n ) ) ; } let words = & words_and_rest [ .. n ] ; let empty_str = \"\" ; let rest = words_and_rest . get ( n ) . unwrap_or ( & empty_str ) ; Ok ( ( T :: read_words ( words ) ?, <$ seq_in >:: read_line ( rest ) ? ) ) } } } ; ( $ u : ident : $ ( + $ bound : path ) * => $ seq_in : ty , $ seq_out : ty ; $ t : ident $ var : ident , $ ( $ inner_t : ident $ inner_var : ident ) ,+ ) => { impl_readable_from_line_for_tuples_with_from_iterator ! ( $ u : $ ( + $ bound ) * => $ seq_in , $ seq_out ; $ ( $ inner_t $ inner_var ) ,+ ) ; impl <$ t : Readable , $ ( $ inner_t : Readable ) ,+ , $ u : Readable > ReadableFromLine for ( $ t , $ ( $ inner_t ) ,+ , $ seq_in ) where <$ u as Readable >:: Output : Sized $ ( + $ bound ) * { type Output = ( $ t :: Output , $ ( $ inner_t :: Output ) ,+ , $ seq_out ) ; fn read_line ( line : & str ) -> Result < Self :: Output , String > { let mut n = $ t :: words_count ( ) ; $ ( n += $ inner_t :: words_count ( ) ; ) + # [ allow ( deprecated ) ] let trimmed = line . trim_right_matches ( '\\n' ) ; let words_and_rest : Vec <& str > = trimmed . splitn ( n + 1 , ' ' ) . collect ( ) ; if words_and_rest . len ( ) < n { return Err ( format ! ( \"line `{}` has {} words, expected at least {}\" , line , words_and_rest . len ( ) , n ) ) ; } let words = & words_and_rest [ .. n ] ; let empty_str = \"\" ; let rest = words_and_rest . get ( n ) . unwrap_or ( & empty_str ) ; let ( $ var , $ ( $ inner_var ) ,* ) = < ( $ t , $ ( $ inner_t ) ,+ ) >:: read_words ( words ) ?; Ok ( ( $ var , $ ( $ inner_var ) ,* , <$ seq_in >:: read_line ( rest ) ? ) ) } } } ; }\n#[macro_export]\nmacro_rules ! readable_collection { ( $ u : ident => $ collection_in : ty , $ collection_out : ty ) => { impl_readable_from_line_for_tuples_with_from_iterator ! ( $ u : => $ collection_in , $ collection_out ; T8 x8 , T7 x7 , T6 x6 , T5 x5 , T4 x4 , T3 x3 , T2 x2 , T1 x1 ) ; } ; ( $ u : ident : $ ( $ bound : path ) ,* => $ collection_in : ty , $ collection_out : ty ) => { impl_readable_from_line_for_tuples_with_from_iterator ! ( $ u : $ ( + $ bound ) * => $ collection_in , $ collection_out ; T8 x8 , T7 x7 , T6 x6 , T5 x5 , T4 x4 , T3 x3 , T2 x2 , T1 x1 ) ; } }\nreadable_collection ! ( U => Vec < U >, Vec < U :: Output > ) ;\nreadable_collection ! ( U => std :: collections :: VecDeque < U >, std :: collections :: VecDeque < U :: Output > ) ;\nreadable_collection ! ( U : Eq , std :: hash :: Hash => std :: collections :: HashSet < U >, std :: collections :: HashSet < U :: Output > ) ;\nreadable_collection ! ( U : Ord => std :: collections :: BTreeSet < U >, std :: collections :: BTreeSet < U :: Output > ) ;\nreadable_collection ! ( U : Ord => std :: collections :: BinaryHeap < U >, std :: collections :: BinaryHeap < U :: Output > ) ;\npub fn read<T: ReadableFromLine>() -> T::Output {\n    let mut line = String::new();\n    std::io::stdin().read_line(&mut line).unwrap();\n    T::read_line(&line).unwrap()\n}\n#[macro_export]\nmacro_rules ! read { ( ) => { let mut line = String :: new ( ) ; std :: io :: stdin ( ) . read_line ( & mut line ) . unwrap ( ) ; } ; ( $ pat : pat = $ t : ty ) => { let $ pat = read ::<$ t > ( ) ; } ; ( $ ( $ pat : pat = $ t : ty ) ,+ ) => { read ! ( ( $ ( $ pat ) ,* ) = ( $ ( $ t ) ,* ) ) ; } ; }\n#[macro_export]\nmacro_rules ! readls { ( $ ( $ pat : pat = $ t : ty ) ,+ ) => { $ ( read ! ( $ pat = $ t ) ; ) * } ; }\npub fn readx<T: ReadableFromLine>() -> Vec<T::Output> {\n    use std::io::{self, BufRead};\n    let stdin = io::stdin();\n    let result = stdin\n        .lock()\n        .lines()\n        .map(|line_result| {\n            let line = line_result.expect(\"read from stdin failed\");\n            T::read_line(&line).unwrap()\n        })\n        .collect();\n    result\n}\n#[macro_export]\nmacro_rules ! readx_loop { ( |$ pat : pat = $ t : ty | $ body : expr ) => { { use std :: io :: BufRead ; let stdin = std :: io :: stdin ( ) ; for line in stdin . lock ( ) . lines ( ) { let line = line . expect ( \"read from stdin failed\" ) ; let $ pat = <$ t >:: read_line ( & line ) . unwrap ( ) ; $ body } } } ; ( |$ ( $ pat : pat = $ t : ty ) ,*| $ body : expr ) => { readx_loop ! ( | ( $ ( $ pat ) ,* ) = ( $ ( $ t ) ,* ) | $ body ) ; } ; }\npub fn readn<T: ReadableFromLine>(n: usize) -> Vec<T::Output> {\n    use std::io::{self, BufRead};\n    let stdin = io::stdin();\n    let result: Vec<T::Output> = stdin\n        .lock()\n        .lines()\n        .take(n)\n        .map(|line_result| {\n            let line = line_result.expect(\"read from stdin failed\");\n            T::read_line(&line).unwrap()\n        })\n        .collect();\n    if result.len() < n {\n        panic!(\n            \"expected reading {} lines, but only {} lines are read\",\n            n,\n            result.len()\n        );\n    }\n    result\n}\n#[macro_export]\nmacro_rules ! readn_loop { ( $ n : expr , |$ pat : pat = $ t : ty | $ body : expr ) => { { use std :: io :: BufRead ; let stdin = std :: io :: stdin ( ) ; let mut lock = stdin . lock ( ) ; for _ in 0 ..$ n { let mut line = String :: new ( ) ; lock . read_line ( & mut line ) . expect ( \"read from stdin failed\" ) ; let $ pat = <$ t >:: read_line ( & line ) . unwrap ( ) ; $ body } } } ; ( $ n : expr , |$ ( $ pat : pat = $ t : ty ) ,*| $ body : expr ) => { readn_loop ! ( $ n , | ( $ ( $ pat ) ,* ) = ( $ ( $ t ) ,* ) | $ body ) ; } ; }\npub trait Words {\n    fn read<T: Readable>(&self) -> T::Output;\n}\nimpl<'a> Words for [&'a str] {\n    fn read<T: Readable>(&self) -> T::Output {\n        T::read_words(self).unwrap()\n    }\n}\nimpl<'a> Words for &'a str {\n    fn read<T: Readable>(&self) -> T::Output {\n        T::read_words(&[self]).unwrap()\n    }\n}\n\npub struct SliceGroupBy<'a, T: 'a, K: Eq, F: Fn(&T) -> K> {\n    key_fn: F,\n    rest: &'a [T],\n}\nimpl<'a, T, K: Eq, F: Fn(&T) -> K> Iterator for SliceGroupBy<'a, T, K, F> {\n    type Item = (K, &'a [T]);\n    fn next(&mut self) -> Option<(K, &'a [T])> {\n        if self.rest.is_empty() {\n            return None;\n        }\n        let key = (self.key_fn)(&self.rest[0]);\n        let mut end = 1;\n        while end < self.rest.len() && (self.key_fn)(&self.rest[end]) == key {\n            end += 1;\n        }\n        let (left, right) = self.rest.split_at(end);\n        self.rest = right;\n        Some((key, left))\n    }\n}\npub struct SplitByGap<'a, T: 'a, F: Fn(&T, &T) -> bool> {\n    gap_fn: F,\n    rest: &'a [T],\n}\nimpl<'a, T, F: Fn(&T, &T) -> bool> Iterator for SplitByGap<'a, T, F> {\n    type Item = &'a [T];\n    fn next(&mut self) -> Option<&'a [T]> {\n        if self.rest.is_empty() {\n            return None;\n        }\n        let mut r = 1;\n        while r < self.rest.len() && !(self.gap_fn)(&self.rest[r - 1], &self.rest[r]) {\n            r += 1;\n        }\n        let (result, rest) = self.rest.split_at(r);\n        self.rest = rest;\n        Some(result)\n    }\n}\npub struct Permutations<'a, T: 'a> {\n    items: &'a [T],\n    indices: Option<Vec<usize>>,\n    is_first: bool,\n}\nimpl<'a, T: 'a> Iterator for Permutations<'a, T> {\n    type Item = Vec<&'a T>;\n    fn next(&mut self) -> Option<Vec<&'a T>> {\n        if !self.is_first {\n            let indices_opt = self.indices.take();\n            if let Some(indices) = indices_opt {\n                self.indices = next_permutation(indices);\n            }\n        } else {\n            self.is_first = false;\n        }\n        self.indices\n            .as_ref()\n            .map(|indices| indices.into_iter().map(|&i| &self.items[i]).collect())\n    }\n}\nfn next_permutation(mut indices: Vec<usize>) -> Option<Vec<usize>> {\n    (0..indices.len().saturating_sub(1))\n        .rev()\n        .find(|&left| indices[left] < indices[left + 1])\n        .map(|left| {\n            let right = (0..indices.len())\n                .rev()\n                .find(|&right| indices[left] < indices[right])\n                .unwrap();\n            indices.swap(left, right);\n            indices[left + 1..].reverse();\n            indices\n        })\n}\nfn count_inversions_sub<T: Clone + Ord>(seq: &[T]) -> (Vec<T>, usize) {\n    if seq.len() <= 1 {\n        (seq.to_vec(), 0)\n    } else {\n        let mid = seq.len() / 2;\n        let (sub1, inv1) = count_inversions_sub(&seq[..mid]);\n        let (sub2, inv2) = count_inversions_sub(&seq[mid..]);\n        let mut sorted = Vec::new();\n        let (mut i1, mut i2) = (0, 0);\n        let mut inv = 0;\n        loop {\n            match (sub1.get(i1), sub2.get(i2)) {\n                (Some(x1), Some(x2)) => {\n                    if x1 <= x2 {\n                        sorted.push(x1.clone());\n                        i1 += 1;\n                    } else {\n                        inv += sub1.len() - i1;\n                        sorted.push(x2.clone());\n                        i2 += 1;\n                    }\n                }\n                (Some(_), None) => {\n                    sorted.extend(sub1[i1..].iter().cloned());\n                    break;\n                }\n                (None, Some(_)) => {\n                    sorted.extend(sub2[i2..].iter().cloned());\n                    break;\n                }\n                (None, None) => break,\n            }\n        }\n        (sorted, inv + inv1 + inv2)\n    }\n}\npub trait SliceExt<T> {\n    fn group_by<K: Eq, F: Fn(&T) -> K>(&self, key_fn: F) -> SliceGroupBy<T, K, F>;\n    fn split_by_gap<F: Fn(&T, &T) -> bool>(&self, gap_fn: F) -> SplitByGap<T, F>;\n    fn permutations(&self) -> Permutations<T>;\n    fn count_inversions(&self) -> usize\n    where\n        T: Clone + Ord;\n}\nimpl<T> SliceExt<T> for [T] {\n    fn group_by<K: Eq, F: Fn(&T) -> K>(&self, key_fn: F) -> SliceGroupBy<T, K, F> {\n        SliceGroupBy {\n            key_fn: key_fn,\n            rest: self,\n        }\n    }\n    fn split_by_gap<F: Fn(&T, &T) -> bool>(&self, gap_fn: F) -> SplitByGap<T, F> {\n        SplitByGap {\n            gap_fn: gap_fn,\n            rest: self,\n        }\n    }\n    fn permutations(&self) -> Permutations<T> {\n        let indices = if self.is_empty() {\n            None\n        } else {\n            Some((0..self.len()).collect())\n        };\n        Permutations {\n            items: self,\n            indices: indices,\n            is_first: true,\n        }\n    }\n    fn count_inversions(&self) -> usize\n    where\n        T: Clone + Ord,\n    {\n        count_inversions_sub(self).1\n    }\n}\npub trait SliceOfVecsExt<T> {\n    fn transpose_clone(&self) -> Option<Vec<Vec<T>>>\n    where\n        T: Clone;\n}\nimpl<T> SliceOfVecsExt<T> for [Vec<T>] {\n    fn transpose_clone(&self) -> Option<Vec<Vec<T>>>\n    where\n        T: Clone,\n    {\n        if self.iter().any(|row| row.is_empty()) {\n            return None;\n        }\n        if self.windows(2).any(|rows| rows[0].len() < rows[1].len()) {\n            return None;\n        }\n        let mut result = Vec::new();\n        let n = self.get(0).map_or(0, |first| first.len());\n        for i in 0..n {\n            let mut result_row = Vec::new();\n            for j in 0..self.len() {\n                if self[j].len() <= i {\n                    break;\n                }\n                result_row.push(self[j][i].clone());\n            }\n            result.push(result_row);\n        }\n        Some(result)\n    }\n}\n\nfn main() {\n    read!(query_count = usize);\n    for _ in 0..query_count {\n        read!();\n        read!(mut ps = Vec<u32>);\n        ps.reverse();\n        ps.pop();\n        let ans = ps.split_by_gap(|&a, &b| b - a > 1)\n            .filter(|s| s[0] != 1 && s.len() % 2 == 1)\n            .count();\n        println!(\"{}\", ans);\n    }\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "5f6895157f8c0c699e27ff089d147113", "src_uid": "d0c50562764f2008045fe57e5da5de1c", "difficulty": 1600}
  4. {"lang": "Rust", "source_code": "// ---------- begin scannner ----------\n#[allow(dead_code)]\nmod scanner {\n    use std::str::FromStr;\n    use std::str::SplitWhitespace;\n    use std::io::Read;\n    use std;\n    pub struct Scanner<'a> {\n        it: SplitWhitespace<'a>\n    }\n    impl<'a> Scanner<'a> {\n        pub fn new(s: &'a String) -> Scanner<'a> {\n            Scanner {\n                it: s.split_whitespace()\n            }\n        }\n        pub fn next<T: FromStr>(&mut self) -> T {\n            match self.it.next().unwrap().parse::<T>() {\n                Ok(v) => v,\n                _ => panic!(\"Scanner error\")\n            }\n        }\n        pub fn next_chars(&mut self) -> Vec<char> {\n            self.next::<String>().chars().collect()\n        }\n    }\n    pub fn read_string() -> String {\n        let mut s = String::new();\n        std::io::stdin().read_to_string(&mut s).unwrap();\n        s\n    }\n}\n// ---------- end scannner ----------\n\nuse std::io::Write;\n\nfn main() {\n    let sc = scanner::read_string();\n    let mut sc = scanner::Scanner::new(&sc);\n    let out = std::io::stdout();\n    let mut out = std::io::BufWriter::new(out.lock());\n    run(&mut sc, &mut out);\n}\n\nfn run(sc: &mut scanner::Scanner, out: &mut std::io::BufWriter<std::io::StdoutLock>) {\n    let q: usize = sc.next();\n    for _ in 0..q {\n        let _h: u32 = sc.next();\n        let n: usize = sc.next();\n        let mut p: Vec<u32> = (0..n).map(|_| sc.next()).collect();\n        p.push(0);\n        p.push(0);\n        let mut ans = 0;\n        let mut i = 0;\n        while i < n {\n            p[i] = p[i + 1] + 1;\n            if i + 2 < p.len() && p[i + 2] + 1 >= p[i + 1] {\n                i += 2;\n            } else {\n                i += 1;\n                ans += 1;\n            }\n        }\n        writeln!(out, \"{}\", ans).ok();\n    }\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "355e27b87e816fa74f612387d7eb121f", "src_uid": "d0c50562764f2008045fe57e5da5de1c", "difficulty": 1600}
  5. {"lang": "Rust", "source_code": "#[doc = \" https://github.com/hatoo/competitive-rust-snippets\"]\n#[allow(unused_imports)]\nuse std::cmp::{max, min, Ordering};\n#[allow(unused_imports)]\nuse std::collections::{BTreeMap, BTreeSet, BinaryHeap, HashMap, HashSet, VecDeque};\n#[allow(unused_imports)]\nuse std::io::{stdin, stdout, BufWriter, Write};\n#[allow(unused_imports)]\nuse std::iter::FromIterator;\n#[macro_export]\nmacro_rules ! dvec { ( $ t : expr ; $ len : expr ) => { vec ! [ $ t ; $ len ] } ; ( $ t : expr ; $ len : expr , $ ( $ rest : expr ) ,* ) => { vec ! [ dvec ! ( $ t ; $ ( $ rest ) ,* ) ; $ len ] } ; }\n#[allow(unused_macros)]\nmacro_rules ! debug { ( $ ( $ a : expr ) ,* ) => { eprintln ! ( concat ! ( $ ( stringify ! ( $ a ) , \" = {:?}, \" ) ,* ) , $ ( $ a ) ,* ) ; } }\n#[macro_export]\nmacro_rules ! input { ( source = $ s : expr , $ ( $ r : tt ) * ) => { let mut parser = Parser :: from_str ( $ s ) ; input_inner ! { parser , $ ( $ r ) * } } ; ( parser = $ parser : ident , $ ( $ r : tt ) * ) => { input_inner ! { $ parser , $ ( $ r ) * } } ; ( new_stdin_parser = $ parser : ident , $ ( $ r : tt ) * ) => { let stdin = std :: io :: stdin ( ) ; let reader = std :: io :: BufReader :: new ( stdin . lock ( ) ) ; let mut $ parser = Parser :: new ( reader ) ; input_inner ! { $ parser , $ ( $ r ) * } } ; ( $ ( $ r : tt ) * ) => { input ! { new_stdin_parser = parser , $ ( $ r ) * } } ; }\n#[macro_export]\nmacro_rules ! input_inner { ( $ parser : ident ) => { } ; ( $ parser : ident , ) => { } ; ( $ parser : ident , $ var : ident : $ t : tt $ ( $ r : tt ) * ) => { let $ var = read_value ! ( $ parser , $ t ) ; input_inner ! { $ parser $ ( $ r ) * } } ; }\n#[macro_export]\nmacro_rules ! read_value { ( $ parser : ident , ( $ ( $ t : tt ) ,* ) ) => { ( $ ( read_value ! ( $ parser , $ t ) ) ,* ) } ; ( $ parser : ident , [ $ t : tt ; $ len : expr ] ) => { ( 0 ..$ len ) . map ( | _ | read_value ! ( $ parser , $ t ) ) . collect ::< Vec < _ >> ( ) } ; ( $ parser : ident , chars ) => { read_value ! ( $ parser , String ) . chars ( ) . collect ::< Vec < char >> ( ) } ; ( $ parser : ident , usize1 ) => { read_value ! ( $ parser , usize ) - 1 } ; ( $ parser : ident , $ t : ty ) => { $ parser . next ::<$ t > ( ) . expect ( \"Parse error\" ) } ; }\nuse std::io;\nuse std::io::BufRead;\nuse std::str;\npub struct Parser<R> {\n    reader: R,\n    buf: Vec<u8>,\n    pos: usize,\n}\nimpl Parser<io::Empty> {\n    pub fn from_str(s: &str) -> Parser<io::Empty> {\n        Parser {\n            reader: io::empty(),\n            buf: s.as_bytes().to_vec(),\n            pos: 0,\n        }\n    }\n}\nimpl<R: BufRead> Parser<R> {\n    pub fn new(reader: R) -> Parser<R> {\n        Parser {\n            reader: reader,\n            buf: vec![],\n            pos: 0,\n        }\n    }\n    pub fn update_buf(&mut self) {\n        self.buf.clear();\n        self.pos = 0;\n        loop {\n            let (len, complete) = {\n                let buf2 = self.reader.fill_buf().unwrap();\n                self.buf.extend_from_slice(buf2);\n                let len = buf2.len();\n                if len == 0 {\n                    break;\n                }\n                (len, buf2[len - 1] <= 0x20)\n            };\n            self.reader.consume(len);\n            if complete {\n                break;\n            }\n        }\n    }\n    pub fn next<T: str::FromStr>(&mut self) -> Result<T, T::Err> {\n        loop {\n            let mut begin = self.pos;\n            while begin < self.buf.len() && (self.buf[begin] <= 0x20) {\n                begin += 1;\n            }\n            let mut end = begin;\n            while end < self.buf.len() && (self.buf[end] > 0x20) {\n                end += 1;\n            }\n            if begin != self.buf.len() {\n                self.pos = end;\n                return str::from_utf8(&self.buf[begin..end]).unwrap().parse::<T>();\n            } else {\n                self.update_buf();\n            }\n        }\n    }\n}\n#[allow(unused_macros)]\nmacro_rules ! debug { ( $ ( $ a : expr ) ,* ) => { eprintln ! ( concat ! ( $ ( stringify ! ( $ a ) , \" = {:?}, \" ) ,* ) , $ ( $ a ) ,* ) ; } }\n#[doc = \" https://github.com/hatoo/competitive-rust-snippets\"]\nconst BIG_STACK_SIZE: bool = true;\n#[allow(dead_code)]\nfn main() {\n    use std::thread;\n    if BIG_STACK_SIZE {\n        thread::Builder::new()\n            .stack_size(32 * 1024 * 1024)\n            .name(\"solve\".into())\n            .spawn(solve)\n            .unwrap()\n            .join()\n            .unwrap();\n    } else {\n        solve();\n    }\n}\nfn solve() {\n    let out = stdout();\n    let mut out = BufWriter::new(out.lock());\n    input!{\n        new_stdin_parser = parser,\n        q: usize\n    }\n    for _ in 0..q {\n        input!{\n            parser = parser,\n            h: usize, n: usize,\n            x: [usize; n],\n        }\n        let mut sl = skiplist::Skiplist::new();\n        for xi in x {\n            sl.insert(xi);\n        }\n        let mut n_magic = 0;\n        let mut cur = h;\n        while cur > 2 {\n            let mut it = sl.le_iter(&(cur-1));\n            if let Some(next1) = it.next() {\n                if cur-next1==1 { // fall\n                    if let Some(next2) = it.next() {\n                        if cur-next2 > 2 {\n                            n_magic += 1;\n                            let magic = cur-2;\n                            sl.remove(&cur);\n                            sl.remove(&next1);\n                            sl.insert(magic);\n                            cur = magic;\n                        }\n                        else {\n                            sl.remove(&cur);\n                            sl.remove(&next1);\n                            cur = next2;\n                        }\n                    }\n                    else {\n                        n_magic += 1;\n                        let magic = cur-2;\n                        sl.remove(&cur);\n                        sl.remove(&next1);\n                        sl.insert(magic);\n                        cur = magic;\n                    }\n                } \n                else {\n                    sl.remove(&cur);\n                    sl.insert(cur-1);\n                    cur = cur-1;\n                }\n            }\n            else {\n                sl.remove(&cur);\n                sl.insert(cur-1);\n                cur = cur-1;\n            }\n        }\n        println!(\"{}\", n_magic);\n    }\n}\nmod skiplist {\n    use std;\n    use std::cell::{Cell, RefCell};\n    use std::collections::{BTreeMap, BTreeSet};\n    use std::fmt;\n    use std::rc::Rc;\n    struct RandGen {\n        x: u64,\n    }\n    impl RandGen {\n        fn new(seed: u64) -> RandGen {\n            RandGen { x: seed }\n        }\n        fn next(&mut self) -> u64 {\n            const a: u64 = 1103515245;\n            const b: u64 = 12345;\n            const m: u64 = 1 << 32;\n            self.x = (a * self.x + b) % m;\n            self.x\n        }\n    }\n    pub struct Skiplist<T> {\n        max_height: Option<usize>,\n        left_sentinel: Rc<RefCell<SkipNode<T>>>,\n        right_sentinel: Rc<RefCell<SkipNode<T>>>,\n        rand_gen: RandGen,\n        traverse_stat: Cell<usize>,\n        connect_stat: Cell<usize>,\n    }\n    impl Skiplist<usize> {\n        fn print_graph(&self) {\n            for level in (0..self.height()).rev() {\n                let mut line = vec![];\n                let mut cur = self.left_sentinel.clone();\n                loop {\n                    let next0 = cur.borrow().next[level].clone();\n                    let next = next0.unwrap().clone();\n                    if next.borrow().value.is_none() {\n                        break;\n                    } else {\n                        cur = next.clone();\n                        let v = cur.borrow().value.clone().unwrap();\n                        line.push(v);\n                    }\n                }\n                let mut ss = vec![];\n                for x in line {\n                    while ss.len() < x {\n                        ss.push(\"--\".to_string());\n                    }\n                    ss.push(format!(\"{:>02}\", x));\n                }\n                println!(\"{}\", ss.connect(\",\"));\n            }\n            println!(\"\");\n        }\n    }\n    impl<T> Skiplist<T>\n    where\n        T: std::cmp::Ord + fmt::Debug + Clone,\n    {\n        pub fn new() -> Skiplist<T> {\n            let left_sentinel = Rc::new(RefCell::new(SkipNode::sentinel()));\n            let right_sentinel = Rc::new(RefCell::new(SkipNode::sentinel()));\n            let sentinel_height = left_sentinel.borrow().height();\n            for level in 0..sentinel_height {\n                left_sentinel.borrow_mut().next[level] = Some(right_sentinel.clone());\n                right_sentinel.borrow_mut().prev[level] = Some(left_sentinel.clone());\n            }\n            Skiplist {\n                max_height: None,\n                left_sentinel: left_sentinel,\n                right_sentinel: right_sentinel,\n                rand_gen: RandGen::new(0),\n                traverse_stat: Cell::new(0),\n                connect_stat: Cell::new(0),\n            }\n        }\n        fn height(&self) -> usize {\n            self.max_height.unwrap_or(33)\n        }\n        fn pick_height(&mut self) -> usize {\n            let z = self.rand_gen.next();\n            let mut k = 0;\n            let mut m = 1;\n            while z & m != 0 {\n                k += 1;\n                m <<= 1;\n            }\n            k + 1\n        }\n        pub fn insert(&mut self, x: T) -> bool {\n            let mut paths = self.traverse(&x);\n            if !paths.is_empty() {\n                let next0 = paths[0].borrow().next[0].clone();\n                let next = next0.unwrap();\n                let found = next.borrow().value.as_ref() == Some(&x);\n                if found {\n                    return false;\n                }\n            }\n            let new_height = self.pick_height();\n            self.max_height = Some(std::cmp::max(self.max_height.unwrap_or(0), new_height));\n            while paths.len() < new_height {\n                paths.push(self.left_sentinel.clone());\n            }\n            let new_node = Rc::new(RefCell::new(SkipNode::new(x, new_height)));\n            for level in 0..new_height {\n                let prev = &paths[level];\n                self.connect_stat.set(self.connect_stat.get() + 1);\n                SkipNode::connect(prev, &new_node, level);\n            }\n            true\n        }\n        fn find_node(&self, x: &T) -> Option<Rc<RefCell<SkipNode<T>>>> {\n            let paths = self.traverse(x);\n            if paths.is_empty() {\n                return None;\n            }\n            let next0 = paths[0].borrow().next[0].clone();\n            let next = next0.unwrap();\n            if next.borrow().value.as_ref() == Some(x) {\n                Some(next)\n            } else {\n                None\n            }\n        }\n        pub fn find(&self, x: &T) -> bool {\n            self.find_node(x).is_some()\n        }\n        pub fn reset_stat(&self) {\n            self.traverse_stat.set(0);\n            self.connect_stat.set(0);\n        }\n        pub fn show_stat(&self) {\n            println!(\"traverse: {}\", self.traverse_stat.get());\n            println!(\"connect: {}\", self.connect_stat.get());\n        }\n        fn traverse(&self, x: &T) -> Vec<Rc<RefCell<SkipNode<T>>>> {\n            if self.height() == 0 {\n                return vec![];\n            }\n            let mut cur = self.left_sentinel.clone();\n            let mut acc = vec![self.left_sentinel.clone(); self.height()];\n            let mut level = self.height() - 1;\n            loop {\n                if level == 0 {\n                    loop {\n                        acc[level] = cur.clone();\n                        let next0 = cur.borrow().next[level].clone();\n                        let next = next0.unwrap();\n                        if next.borrow().value.is_none()\n                            || next.borrow().value.as_ref().unwrap() >= x\n                        {\n                            break;\n                        } else {\n                            cur = next.clone();\n                            self.traverse_stat.set(self.traverse_stat.get() + 1);\n                        }\n                    }\n                    break;\n                }\n                let next0 = cur.borrow().next[level].clone();\n                let next = next0.unwrap();\n                if next.borrow().value.is_none() || next.borrow().value.as_ref().unwrap() >= x {\n                    acc[level] = cur.clone();\n                    level -= 1;\n                    continue;\n                } else {\n                    cur = next;\n                    self.traverse_stat.set(self.traverse_stat.get() + 1);\n                }\n            }\n            acc\n        }\n        fn traverse_rev(&self, x: &T) -> Vec<Rc<RefCell<SkipNode<T>>>> {\n            if self.height() == 0 {\n                return vec![];\n            }\n            let mut cur = self.right_sentinel.clone();\n            let mut acc = vec![self.right_sentinel.clone(); self.height()];\n            let mut level = self.height() - 1;\n            loop {\n                if level == 0 {\n                    loop {\n                        acc[level] = cur.clone();\n                        let next = cur.borrow().prev[level].clone().unwrap();\n                        if next.borrow().value.is_none()\n                            || next.borrow().value.as_ref().unwrap() <= x\n                        {\n                            break;\n                        } else {\n                            cur = next.clone();\n                        }\n                    }\n                    break;\n                }\n                let next = cur.borrow().prev[level].clone().unwrap();\n                if next.borrow().value.is_none() || next.borrow().value.as_ref().unwrap() <= x {\n                    acc[level] = cur.clone();\n                    level -= 1;\n                    continue;\n                } else {\n                    cur = next;\n                }\n            }\n            acc\n        }\n        pub fn remove(&mut self, x: &T) -> bool {\n            let node = self.find_node(x);\n            if node.is_none() {\n                return false;\n            }\n            let node = node.unwrap();\n            node.borrow_mut().remove();\n            true\n        }\n        #[doc = \"iterator in range [x,]\"]\n        pub fn ge_iter(&self, x: &T) -> Range<T> {\n            let f = self.traverse(x)[0].clone();\n            Range {\n                forward: true,\n                f: f,\n                b: self.right_sentinel.clone(),\n            }\n        }\n        #[doc = \"iterator in range [,x]\"]\n        pub fn le_iter(&self, x: &T) -> Range<T> {\n            let b = self.traverse_rev(x)[0].clone();\n            Range {\n                forward: false,\n                f: self.left_sentinel.clone(),\n                b: b,\n            }\n        }\n        #[doc = \"iterator in range [..]\"]\n        pub fn iter(&self) -> Range<T> {\n            Range {\n                forward: true,\n                f: self.left_sentinel.clone(),\n                b: self.right_sentinel.clone(),\n            }\n        }\n    }\n    pub struct Range<T> {\n        forward: bool,\n        f: Rc<RefCell<SkipNode<T>>>,\n        b: Rc<RefCell<SkipNode<T>>>,\n    }\n    impl<T: Clone> Iterator for Range<T> {\n        type Item = T;\n        fn next(&mut self) -> Option<Self::Item> {\n            let next0 = if self.forward {\n                self.f.borrow().next[0].clone()\n            } else {\n                self.b.borrow().prev[0].clone()\n            };\n            if next0.is_none() {\n                return None;\n            }\n            let next = next0.unwrap();\n            if self.forward {\n                self.f = next;\n                self.f.borrow().value.clone()\n            } else {\n                self.b = next;\n                self.b.borrow().value.clone()\n            }\n        }\n    }\n    impl<T: Clone> DoubleEndedIterator for Range<T> {\n        fn next_back(&mut self) -> Option<Self::Item> {\n            let next0 = if self.forward {\n                self.b.borrow().prev[0].clone()\n            } else {\n                self.f.borrow().next[0].clone()\n            };\n            if next0.is_none() {\n                return None;\n            }\n            let next = next0.unwrap();\n            if self.forward {\n                self.b = next;\n                self.b.borrow().value.clone()\n            } else {\n                self.f = next;\n                self.f.borrow().value.clone()\n            }\n        }\n    }\n    impl<T> fmt::Debug for Skiplist<T>\n    where\n        T: fmt::Debug + Clone + std::cmp::Ord,\n    {\n        fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {\n            let v: Vec<T> = self.iter().collect();\n            writeln!(f, \"{:?}\", v);\n            Ok(())\n        }\n    }\n    struct SkipNode<T> {\n        value: Option<T>,\n        prev: Vec<Option<Rc<RefCell<SkipNode<T>>>>>,\n        next: Vec<Option<Rc<RefCell<SkipNode<T>>>>>,\n    }\n    impl<T> fmt::Debug for SkipNode<T>\n    where\n        T: fmt::Debug + std::cmp::Ord,\n    {\n        fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {\n            writeln!(f, \"{:?}, {:?}\", self.value, self.height());\n            Ok(())\n        }\n    }\n    impl<T> SkipNode<T>\n    where\n        T: std::cmp::Ord + fmt::Debug,\n    {\n        fn sentinel() -> SkipNode<T> {\n            SkipNode {\n                value: None,\n                prev: vec![None; 33],\n                next: vec![None; 33],\n            }\n        }\n        fn new(value: T, height: usize) -> SkipNode<T> {\n            SkipNode {\n                value: Some(value),\n                prev: vec![None; height],\n                next: vec![None; height],\n            }\n        }\n        fn height(&self) -> usize {\n            self.next.len()\n        }\n        fn remove(&mut self) {\n            for level in 0..self.height() {\n                let prev_node = self.prev[level].clone().unwrap();\n                let next_node = self.next[level].clone().unwrap();\n                next_node.borrow_mut().prev[level] = Some(prev_node.clone());\n                prev_node.borrow_mut().next[level] = Some(next_node.clone());\n            }\n        }\n        fn connect(x: &Rc<RefCell<Self>>, y: &Rc<RefCell<Self>>, level: usize) {\n            let x_next = x.borrow().next[level].clone().unwrap();\n            x.borrow_mut().next[level] = Some(y.clone());\n            y.borrow_mut().prev[level] = Some(x.clone());\n            y.borrow_mut().next[level] = Some(x_next.clone());\n            x_next.borrow_mut().prev[level] = Some(y.clone());\n        }\n    }\n    #[test]\n    fn test_iter() {\n        let mut sl = Skiplist::new();\n        for i in 1..6 {\n            sl.insert(i);\n        }\n        for x in sl.iter() {\n            println!(\"{}\", x);\n        }\n        for x in sl.ge_iter(&2) {\n            println!(\"{}\", x);\n        }\n        for x in sl.le_iter(&2) {\n            println!(\"{}\", x);\n        }\n    }\n    #[test]\n    fn test_pick_height() {\n        let mut sl = Skiplist::<i64>::new();\n        let mut cnt = vec![0; 60];\n        for _ in 0..1_000 {\n            cnt[sl.pick_height()] += 1;\n        }\n        println!(\"{:?}\", cnt);\n    }\n    #[test]\n    fn test_insert() {\n        let mut s = Skiplist::new();\n        assert_eq!(s.find(&10), false);\n        s.insert(10);\n        assert_eq!(s.find(&8), false);\n        assert_eq!(s.find(&10), true);\n    }\n    #[test]\n    fn test_debug0() {\n        let mut s = Skiplist::new();\n        let mut data = vec![920, 265, 659];\n        for x in data {\n            s.insert(x);\n            assert!(s.find(&x));\n        }\n        s.insert(660);\n        dbg!(&s);\n        assert!(s.find(&660));\n    }\n    #[test]\n    fn test_debug1() {\n        let mut s = Skiplist::new();\n        s.insert(0);\n        assert!(s.find(&0));\n        s.insert(5);\n        assert!(s.find(&5));\n    }\n    #[test]\n    fn test_debug2() {\n        let mut s = Skiplist::new();\n        s.insert(0);\n        s.insert(5);\n        s.print_graph();\n        s.insert(9);\n        s.print_graph();\n        assert_eq!(s.find(&5), true);\n        s.remove(&4);\n        assert_eq!(s.find(&5), true);\n        s.remove(&5);\n        s.print_graph();\n        assert_eq!(s.find(&5), false);\n        s.remove(&9);\n        s.print_graph();\n        assert_eq!(s.find(&9), false);\n        assert_eq!(s.find(&0), true);\n    }\n    #[test]\n    fn test_compare_reference_insert_and_find() {\n        use rand::{Rng, SeedableRng, StdRng};\n        let mut rng = StdRng::from_seed(&[3, 2, 1]);\n        let mut ts = BTreeSet::new();\n        let mut sl = Skiplist::new();\n        let size = 10000;\n        let mut data1 = vec![];\n        for _ in 0..size {\n            let x = rng.next_u64() % size;\n            data1.push(x as usize);\n        }\n        let mut data2 = vec![];\n        for _ in 0..size {\n            let x = rng.next_u64() % size;\n            data2.push(x as usize);\n        }\n        let mut data3 = vec![];\n        for _ in 0..size {\n            let x = rng.next_u64() % size;\n            data3.push(x as usize);\n        }\n        println!(\"insert and find phase\");\n        for x in data1 {\n            ts.insert(x);\n            sl.insert(x);\n            assert_eq!(sl.find(&x), ts.contains(&x));\n        }\n        sl.print_graph();\n        println!(\"find phase\");\n        for x in data2 {\n            assert_eq!(sl.find(&x), ts.contains(&x));\n        }\n        println!(\"remove phase\");\n        for x in data3 {\n            assert_eq!(sl.remove(&x), ts.remove(&x));\n            assert_eq!(sl.find(&x), ts.contains(&x));\n        }\n    }\n    #[test]\n    fn test_skiplist_stat() {\n        use rand::{Rng, SeedableRng, StdRng};\n        let size = 1000;\n        let mut rng = StdRng::from_seed(&[3, 2, 1]);\n        let mut s = Skiplist::new();\n        println!(\"insert\");\n        for _ in 0..size {\n            s.insert(rng.next_u64());\n        }\n        s.show_stat();\n        s.reset_stat();\n        println!(\"connect\");\n        for _ in 0..size {\n            s.find(&rng.next_u64());\n        }\n        s.show_stat();\n    }\n    #[bench]\n    fn bench_skiplist_insert_random(b: &mut test::Bencher) {\n        use rand::{Rng, SeedableRng, StdRng};\n        let size = 10000;\n        let mut s = Skiplist::new();\n        let mut rng = StdRng::from_seed(&[3, 2, 1]);\n        b.iter(|| {\n            for _ in 0..size {\n                s.insert(rng.next_u64());\n            }\n        });\n    }\n    #[bench]\n    fn bench_skiplist_find_random(b: &mut test::Bencher) {\n        use rand::{Rng, SeedableRng, StdRng};\n        let size = 10000;\n        let mut s = Skiplist::new();\n        let mut rng = StdRng::from_seed(&[3, 2, 1]);\n        for _ in 0..size {\n            s.insert(rng.next_u64());\n        }\n        b.iter(|| {\n            for _ in 0..size {\n                s.find(&rng.next_u64());\n            }\n        });\n    }\n    #[bench]\n    fn bench_skiplist_insert_forward(b: &mut test::Bencher) {\n        let mut s = Skiplist::new();\n        let size = 10000;\n        let mut data = vec![];\n        for i in 0..size {\n            data.push(i);\n        }\n        b.iter(|| {\n            for &x in &data {\n                s.insert(x);\n            }\n        });\n    }\n    #[bench]\n    fn bench_skiplist_insert_reverse(b: &mut test::Bencher) {\n        let mut s = Skiplist::new();\n        let size = 10000;\n        let mut data = vec![];\n        for i in 0..size {\n            data.push(i);\n        }\n        data.reverse();\n        b.iter(|| {\n            for &x in &data {\n                s.insert(x);\n            }\n        });\n    }\n    #[bench]\n    fn bench_skiplist_connect_simple(b: &mut test::Bencher) {\n        let left = Rc::new(RefCell::new(SkipNode::new(0, 2)));\n        let right = Rc::new(RefCell::new(SkipNode::new(10000000, 2)));\n        for l in 0..2 {\n            left.borrow_mut().next[l] = Some(right.clone());\n            right.borrow_mut().prev[l] = Some(left.clone());\n        }\n        let mut data = vec![];\n        for i in 0..10000 {\n            let n = Rc::new(RefCell::new(SkipNode::new(i + 1, 2)));\n            data.push(n)\n        }\n        b.iter(|| {\n            for n in &data {\n                for l in 0..2 {\n                    SkipNode::connect(&left, n, l);\n                }\n            }\n        })\n    }\n    #[bench]\n    fn bench_skiplist_connect_random(b: &mut test::Bencher) {\n        use rand::{Rng, SeedableRng, StdRng};\n        let mut rng = StdRng::from_seed(&[3, 2, 1]);\n        let left = Rc::new(RefCell::new(SkipNode::new(0, 2)));\n        let right = Rc::new(RefCell::new(SkipNode::new(10000000, 2)));\n        for l in 0..2 {\n            left.borrow_mut().next[l] = Some(right.clone());\n            right.borrow_mut().prev[l] = Some(left.clone());\n        }\n        let mut prev_cands = vec![left.clone()];\n        let mut data = vec![];\n        for i in 0..10000 {\n            let n = Rc::new(RefCell::new(SkipNode::new(i + 1, 2)));\n            let i = rng.next_u64() as usize % prev_cands.len();\n            let prev = prev_cands[i].clone();\n            data.push((prev, n.clone()));\n            prev_cands.push(n.clone());\n        }\n        b.iter(|| {\n            for (prev, n) in &data {\n                for l in 0..2 {\n                    SkipNode::connect(&prev, &n, l);\n                }\n            }\n        })\n    }\n    #[bench]\n    fn bench_skiplist_alloc_new_node(b: &mut test::Bencher) {\n        b.iter(|| {\n            for _ in 0..10000 {\n                Rc::new(RefCell::new(SkipNode::new(0, 2)));\n            }\n        })\n    }\n    #[bench]\n    fn bench_skiplist_pick_height(b: &mut test::Bencher) {\n        let mut sl = Skiplist::<i64>::new();\n        b.iter(|| {\n            for _ in 0..10000 {\n                sl.pick_height();\n            }\n        })\n    }\n    #[bench]\n    fn bench_btree_insert_random(b: &mut test::Bencher) {\n        use rand::{Rng, SeedableRng, StdRng};\n        let size = 10000;\n        let mut s = BTreeSet::new();\n        let mut rng = StdRng::from_seed(&[3, 2, 1]);\n        b.iter(|| {\n            for _ in 0..size {\n                s.insert(rng.next_u64());\n            }\n        });\n    }\n    #[bench]\n    fn bench_btree_find_random(b: &mut test::Bencher) {\n        use rand::{Rng, SeedableRng, StdRng};\n        let size = 10000;\n        let mut s = BTreeSet::new();\n        let mut rng = StdRng::from_seed(&[3, 2, 1]);\n        for _ in 0..size {\n            s.insert(rng.next_u64());\n        }\n        b.iter(|| {\n            for _ in 0..size {\n                s.contains(&rng.next_u64());\n            }\n        });\n    }\n    use std::collections::HashMap;\n    pub struct Multiset<T> {\n        sl: Skiplist<T>,\n        counting: HashMap<T, usize>,\n    }\n    impl<T> Multiset<T>\n    where\n        T: Ord + fmt::Debug + Clone + std::hash::Hash,\n    {\n        pub fn new() -> Multiset<T> {\n            Multiset {\n                sl: Skiplist::new(),\n                counting: HashMap::new(),\n            }\n        }\n        pub fn insert(&mut self, x: T) {\n            self.sl.insert(x.clone());\n            *self.counting.entry(x).or_insert(0) += 1;\n        }\n        pub fn counting(&self, x: &T) -> usize {\n            self.counting.get(x).cloned().unwrap_or(0)\n        }\n        pub fn remove(&mut self, x: &T) -> bool {\n            let cnt = self.counting(x);\n            if cnt == 0 {\n                return false;\n            }\n            if cnt >= 2 {\n                *self.counting.get_mut(x).unwrap() -= 1;\n            } else if cnt == 1 {\n                self.counting.remove(x);\n                self.sl.remove(x);\n            }\n            return true;\n        }\n        pub fn unwrap(&self) -> &Skiplist<T> {\n            &self.sl\n        }\n    }\n    #[test]\n    fn test_multiset() {\n        let mut s = Multiset::new();\n        assert_eq!(s.counting(&1), 0);\n        s.insert(1);\n        assert_eq!(s.counting(&1), 1);\n        s.insert(1);\n        assert_eq!(s.counting(&1), 2);\n        assert!(s.remove(&1));\n        assert_eq!(s.unwrap().ge_iter(&1).next().unwrap(), 1);\n        assert_eq!(s.counting(&1), 1);\n        assert!(s.remove(&1));\n        assert_eq!(s.counting(&1), 0);\n        assert_eq!(s.unwrap().ge_iter(&1).next(), None);\n    }\n}", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "e05ec0a3265586a6789d2d46f8e0f61e", "src_uid": "d0c50562764f2008045fe57e5da5de1c", "difficulty": 1600}
  6. {"lang": "Rust", "source_code": "#[doc = \" https://github.com/hatoo/competitive-rust-snippets\"]\n#[allow(unused_imports)]\nuse std::cmp::{max, min, Ordering};\n#[allow(unused_imports)]\nuse std::collections::{BTreeMap, BTreeSet, BinaryHeap, HashMap, HashSet, VecDeque};\n#[allow(unused_imports)]\nuse std::iter::FromIterator;\n#[macro_export]\nmacro_rules ! chmax { ( $ x : expr , $ ( $ v : expr ) ,+ ) => { $ ( $ x = std :: cmp :: max ( $ x ,$ v ) ; ) + } ; }\n#[macro_export]\nmacro_rules ! chmin { ( $ x : expr , $ ( $ v : expr ) ,+ ) => { $ ( $ x = std :: cmp :: min ( $ x ,$ v ) ; ) + } ; }\n#[macro_export]\nmacro_rules ! max { ( $ x : expr ) => ( $ x ) ; ( $ x : expr , $ ( $ xs : expr ) ,+ ) => { std :: cmp :: max ( $ x , max ! ( $ ( $ xs ) ,+ ) ) } ; }\n#[macro_export]\nmacro_rules ! min { ( $ x : expr ) => ( $ x ) ; ( $ x : expr , $ ( $ xs : expr ) ,+ ) => { std :: cmp :: min ( $ x , min ! ( $ ( $ xs ) ,+ ) ) } ; }\n#[macro_export]\nmacro_rules ! dvec { ( $ t : expr ; $ len : expr ) => { vec ! [ $ t ; $ len ] } ; ( $ t : expr ; $ len : expr , $ ( $ rest : expr ) ,* ) => { vec ! [ dvec ! ( $ t ; $ ( $ rest ) ,* ) ; $ len ] } ; }\n#[doc = \" main\"]\n#[allow(unused_imports)]\nuse std::io::{stdin, stdout, BufWriter, Write};\n#[macro_export]\nmacro_rules ! input { ( source = $ s : expr , $ ( $ r : tt ) * ) => { let mut parser = Parser :: from_str ( $ s ) ; input_inner ! { parser , $ ( $ r ) * } } ; ( parser = $ parser : ident , $ ( $ r : tt ) * ) => { input_inner ! { $ parser , $ ( $ r ) * } } ; ( new_stdin_parser = $ parser : ident , $ ( $ r : tt ) * ) => { let stdin = std :: io :: stdin ( ) ; let reader = std :: io :: BufReader :: new ( stdin . lock ( ) ) ; let mut $ parser = Parser :: new ( reader ) ; input_inner ! { $ parser , $ ( $ r ) * } } ; ( $ ( $ r : tt ) * ) => { input ! { new_stdin_parser = parser , $ ( $ r ) * } } ; }\n#[macro_export]\nmacro_rules ! input_inner { ( $ parser : ident ) => { } ; ( $ parser : ident , ) => { } ; ( $ parser : ident , $ var : ident : $ t : tt $ ( $ r : tt ) * ) => { let $ var = read_value ! ( $ parser , $ t ) ; input_inner ! { $ parser $ ( $ r ) * } } ; }\n#[macro_export]\nmacro_rules ! read_value { ( $ parser : ident , ( $ ( $ t : tt ) ,* ) ) => { ( $ ( read_value ! ( $ parser , $ t ) ) ,* ) } ; ( $ parser : ident , [ $ t : tt ; $ len : expr ] ) => { ( 0 ..$ len ) . map ( | _ | read_value ! ( $ parser , $ t ) ) . collect ::< Vec < _ >> ( ) } ; ( $ parser : ident , chars ) => { read_value ! ( $ parser , String ) . chars ( ) . collect ::< Vec < char >> ( ) } ; ( $ parser : ident , usize1 ) => { read_value ! ( $ parser , usize ) - 1 } ; ( $ parser : ident , $ t : ty ) => { $ parser . next ::<$ t > ( ) . expect ( \"Parse error\" ) } ; }\nuse std::io;\nuse std::io::BufRead;\nuse std::str;\npub struct Parser<R> {\n    reader: R,\n    buf: Vec<u8>,\n    pos: usize,\n}\nimpl Parser<io::Empty> {\n    pub fn from_str(s: &str) -> Parser<io::Empty> {\n        Parser {\n            reader: io::empty(),\n            buf: s.as_bytes().to_vec(),\n            pos: 0,\n        }\n    }\n}\nimpl<R: BufRead> Parser<R> {\n    pub fn new(reader: R) -> Parser<R> {\n        Parser {\n            reader: reader,\n            buf: vec![],\n            pos: 0,\n        }\n    }\n    pub fn update_buf(&mut self) {\n        self.buf.clear();\n        self.pos = 0;\n        loop {\n            let (len, complete) = {\n                let buf2 = self.reader.fill_buf().unwrap();\n                self.buf.extend_from_slice(buf2);\n                let len = buf2.len();\n                if len == 0 {\n                    break;\n                }\n                (len, buf2[len - 1] <= 0x20)\n            };\n            self.reader.consume(len);\n            if complete {\n                break;\n            }\n        }\n    }\n    pub fn next<T: str::FromStr>(&mut self) -> Result<T, T::Err> {\n        loop {\n            let mut begin = self.pos;\n            while begin < self.buf.len() && (self.buf[begin] <= 0x20) {\n                begin += 1;\n            }\n            let mut end = begin;\n            while end < self.buf.len() && (self.buf[end] > 0x20) {\n                end += 1;\n            }\n            if begin != self.buf.len() {\n                self.pos = end;\n                return str::from_utf8(&self.buf[begin..end]).unwrap().parse::<T>();\n            } else {\n                self.update_buf();\n            }\n        }\n    }\n}\n#[allow(unused_macros)]\nmacro_rules ! debug { ( $ ( $ a : expr ) ,* ) => { eprintln ! ( concat ! ( $ ( stringify ! ( $ a ) , \" = {:?}, \" ) ,* ) , $ ( $ a ) ,* ) ; } }\n#[doc = \" https://github.com/hatoo/competitive-rust-snippets\"]\nconst BIG_STACK_SIZE: bool = true;\n#[allow(dead_code)]\nfn main() {\n    use std::thread;\n    if BIG_STACK_SIZE {\n        thread::Builder::new()\n            .stack_size(32 * 1024 * 1024)\n            .name(\"solve\".into())\n            .spawn(solve)\n            .unwrap()\n            .join()\n            .unwrap();\n    } else {\n        solve();\n    }\n}\nfn solve() {\n    let out = stdout();\n    let mut out = BufWriter::new(out.lock());\n    input!{\n        new_stdin_parser = parser,\n        q:usize,\n    }\n    for _ in 0..q {\n        input!{\n            parser = parser,\n            h:usize,n:usize,\n            p:[usize;n],\n        }\n        let mut state = vec![false; h+1];\n        for pi in p {\n            state[pi] = true;\n        }\n        let mut magic = 0;\n        let mut cur = h;\n        while cur > 2 {\n            assert!(state[cur]);\n\n            let jump1 = cur-1;\n            let jump2 = cur-2;\n            // 2jump case\n            if state[jump1] && state[jump2] {\n                cur = jump2;\n            }\n            else if !state[jump1] {\n                state[jump1] = true;\n                cur = jump1;\n            }\n            else {\n                magic += 1;\n                state[jump2] = true;\n                cur = jump2;\n            }\n        }\n        println!(\"{}\",magic);\n    }\n}", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "b3249dddb57f553525d6b858ab92ce28", "src_uid": "d0c50562764f2008045fe57e5da5de1c", "difficulty": 1600}
  7. {"lang": "Rust", "source_code": "#[doc = \" https://github.com/hatoo/competitive-rust-snippets\"]\n#[allow(unused_imports)]\nuse std::cmp::{max, min, Ordering};\n#[allow(unused_imports)]\nuse std::collections::{BTreeMap, BTreeSet, BinaryHeap, HashMap, HashSet, VecDeque};\n#[allow(unused_imports)]\nuse std::iter::FromIterator;\n#[macro_export]\nmacro_rules ! chmax { ( $ x : expr , $ ( $ v : expr ) ,+ ) => { $ ( $ x = std :: cmp :: max ( $ x ,$ v ) ; ) + } ; }\n#[macro_export]\nmacro_rules ! chmin { ( $ x : expr , $ ( $ v : expr ) ,+ ) => { $ ( $ x = std :: cmp :: min ( $ x ,$ v ) ; ) + } ; }\n#[macro_export]\nmacro_rules ! max { ( $ x : expr ) => ( $ x ) ; ( $ x : expr , $ ( $ xs : expr ) ,+ ) => { std :: cmp :: max ( $ x , max ! ( $ ( $ xs ) ,+ ) ) } ; }\n#[macro_export]\nmacro_rules ! min { ( $ x : expr ) => ( $ x ) ; ( $ x : expr , $ ( $ xs : expr ) ,+ ) => { std :: cmp :: min ( $ x , min ! ( $ ( $ xs ) ,+ ) ) } ; }\n#[macro_export]\nmacro_rules ! dvec { ( $ t : expr ; $ len : expr ) => { vec ! [ $ t ; $ len ] } ; ( $ t : expr ; $ len : expr , $ ( $ rest : expr ) ,* ) => { vec ! [ dvec ! ( $ t ; $ ( $ rest ) ,* ) ; $ len ] } ; }\n#[doc = \" main\"]\n#[allow(unused_imports)]\nuse std::io::{stdin, stdout, BufWriter, Write};\n#[macro_export]\nmacro_rules ! input { ( source = $ s : expr , $ ( $ r : tt ) * ) => { let mut parser = Parser :: from_str ( $ s ) ; input_inner ! { parser , $ ( $ r ) * } } ; ( parser = $ parser : ident , $ ( $ r : tt ) * ) => { input_inner ! { $ parser , $ ( $ r ) * } } ; ( new_stdin_parser = $ parser : ident , $ ( $ r : tt ) * ) => { let stdin = std :: io :: stdin ( ) ; let reader = std :: io :: BufReader :: new ( stdin . lock ( ) ) ; let mut $ parser = Parser :: new ( reader ) ; input_inner ! { $ parser , $ ( $ r ) * } } ; ( $ ( $ r : tt ) * ) => { input ! { new_stdin_parser = parser , $ ( $ r ) * } } ; }\n#[macro_export]\nmacro_rules ! input_inner { ( $ parser : ident ) => { } ; ( $ parser : ident , ) => { } ; ( $ parser : ident , $ var : ident : $ t : tt $ ( $ r : tt ) * ) => { let $ var = read_value ! ( $ parser , $ t ) ; input_inner ! { $ parser $ ( $ r ) * } } ; }\n#[macro_export]\nmacro_rules ! read_value { ( $ parser : ident , ( $ ( $ t : tt ) ,* ) ) => { ( $ ( read_value ! ( $ parser , $ t ) ) ,* ) } ; ( $ parser : ident , [ $ t : tt ; $ len : expr ] ) => { ( 0 ..$ len ) . map ( | _ | read_value ! ( $ parser , $ t ) ) . collect ::< Vec < _ >> ( ) } ; ( $ parser : ident , chars ) => { read_value ! ( $ parser , String ) . chars ( ) . collect ::< Vec < char >> ( ) } ; ( $ parser : ident , usize1 ) => { read_value ! ( $ parser , usize ) - 1 } ; ( $ parser : ident , $ t : ty ) => { $ parser . next ::<$ t > ( ) . expect ( \"Parse error\" ) } ; }\nuse std::io;\nuse std::io::BufRead;\nuse std::str;\npub struct Parser<R> {\n    reader: R,\n    buf: Vec<u8>,\n    pos: usize,\n}\nimpl Parser<io::Empty> {\n    pub fn from_str(s: &str) -> Parser<io::Empty> {\n        Parser {\n            reader: io::empty(),\n            buf: s.as_bytes().to_vec(),\n            pos: 0,\n        }\n    }\n}\nimpl<R: BufRead> Parser<R> {\n    pub fn new(reader: R) -> Parser<R> {\n        Parser {\n            reader: reader,\n            buf: vec![],\n            pos: 0,\n        }\n    }\n    pub fn update_buf(&mut self) {\n        self.buf.clear();\n        self.pos = 0;\n        loop {\n            let (len, complete) = {\n                let buf2 = self.reader.fill_buf().unwrap();\n                self.buf.extend_from_slice(buf2);\n                let len = buf2.len();\n                if len == 0 {\n                    break;\n                }\n                (len, buf2[len - 1] <= 0x20)\n            };\n            self.reader.consume(len);\n            if complete {\n                break;\n            }\n        }\n    }\n    pub fn next<T: str::FromStr>(&mut self) -> Result<T, T::Err> {\n        loop {\n            let mut begin = self.pos;\n            while begin < self.buf.len() && (self.buf[begin] <= 0x20) {\n                begin += 1;\n            }\n            let mut end = begin;\n            while end < self.buf.len() && (self.buf[end] > 0x20) {\n                end += 1;\n            }\n            if begin != self.buf.len() {\n                self.pos = end;\n                return str::from_utf8(&self.buf[begin..end]).unwrap().parse::<T>();\n            } else {\n                self.update_buf();\n            }\n        }\n    }\n}\n#[allow(unused_macros)]\nmacro_rules ! debug { ( $ ( $ a : expr ) ,* ) => { eprintln ! ( concat ! ( $ ( stringify ! ( $ a ) , \" = {:?}, \" ) ,* ) , $ ( $ a ) ,* ) ; } }\n#[doc = \" https://github.com/hatoo/competitive-rust-snippets\"]\nconst BIG_STACK_SIZE: bool = true;\n#[allow(dead_code)]\nfn main() {\n    use std::thread;\n    if BIG_STACK_SIZE {\n        thread::Builder::new()\n            .stack_size(32 * 1024 * 1024)\n            .name(\"solve\".into())\n            .spawn(solve)\n            .unwrap()\n            .join()\n            .unwrap();\n    } else {\n        solve();\n    }\n}\nfn solve() {\n    let out = stdout();\n    let mut out = BufWriter::new(out.lock());\n    input!{\n        new_stdin_parser = parser,\n        q:usize,\n    }\n    for _ in 0..q {\n        input!{\n            parser = parser,\n            h:usize,n:usize,\n            p:[usize;n],\n        }\n        let mut state = HashSet::new();\n        for pi in p {\n            state.insert(pi);\n        }\n        let mut magic = 0;\n        let mut cur = h;\n        while cur > 2 {\n            assert!(state.contains(&cur));\n\n            let jump1 = cur-1;\n            let jump2 = cur-2;\n            // 2jump case\n            if state.contains(&jump1) && state.contains(&jump2) {\n                state.remove(&cur);\n                state.remove(&jump1);\n                cur = jump2;\n            }\n            else if !state.contains(&jump1) {\n                state.remove(&cur);\n                state.insert(jump1);\n                cur = jump1;\n            }\n            else {\n                magic += 1;\n                state.remove(&cur);\n                state.remove(&jump1);\n                state.insert(jump2); // magic\n                cur = jump2;\n            }\n        }\n        writeln!(out,\"{}\",magic);\n    }\n}", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "50f2554e9f0a95b376b645f7649cb31a", "src_uid": "d0c50562764f2008045fe57e5da5de1c", "difficulty": 1600}
  8. {"lang": "Rust", "source_code": "#[doc = \" https://github.com/hatoo/competitive-rust-snippets\"]\n#[allow(unused_imports)]\nuse std::cmp::{max, min, Ordering};\n#[allow(unused_imports)]\nuse std::collections::{BTreeMap, BTreeSet, BinaryHeap, HashMap, HashSet, VecDeque};\n#[allow(unused_imports)]\nuse std::iter::FromIterator;\n#[macro_export]\nmacro_rules ! chmax { ( $ x : expr , $ ( $ v : expr ) ,+ ) => { $ ( $ x = std :: cmp :: max ( $ x ,$ v ) ; ) + } ; }\n#[macro_export]\nmacro_rules ! chmin { ( $ x : expr , $ ( $ v : expr ) ,+ ) => { $ ( $ x = std :: cmp :: min ( $ x ,$ v ) ; ) + } ; }\n#[macro_export]\nmacro_rules ! max { ( $ x : expr ) => ( $ x ) ; ( $ x : expr , $ ( $ xs : expr ) ,+ ) => { std :: cmp :: max ( $ x , max ! ( $ ( $ xs ) ,+ ) ) } ; }\n#[macro_export]\nmacro_rules ! min { ( $ x : expr ) => ( $ x ) ; ( $ x : expr , $ ( $ xs : expr ) ,+ ) => { std :: cmp :: min ( $ x , min ! ( $ ( $ xs ) ,+ ) ) } ; }\n#[macro_export]\nmacro_rules ! dvec { ( $ t : expr ; $ len : expr ) => { vec ! [ $ t ; $ len ] } ; ( $ t : expr ; $ len : expr , $ ( $ rest : expr ) ,* ) => { vec ! [ dvec ! ( $ t ; $ ( $ rest ) ,* ) ; $ len ] } ; }\n#[doc = \" main\"]\n#[allow(unused_imports)]\nuse std::io::{stdin, stdout, BufWriter, Write};\n#[macro_export]\nmacro_rules ! input { ( source = $ s : expr , $ ( $ r : tt ) * ) => { let mut parser = Parser :: from_str ( $ s ) ; input_inner ! { parser , $ ( $ r ) * } } ; ( parser = $ parser : ident , $ ( $ r : tt ) * ) => { input_inner ! { $ parser , $ ( $ r ) * } } ; ( new_stdin_parser = $ parser : ident , $ ( $ r : tt ) * ) => { let stdin = std :: io :: stdin ( ) ; let reader = std :: io :: BufReader :: new ( stdin . lock ( ) ) ; let mut $ parser = Parser :: new ( reader ) ; input_inner ! { $ parser , $ ( $ r ) * } } ; ( $ ( $ r : tt ) * ) => { input ! { new_stdin_parser = parser , $ ( $ r ) * } } ; }\n#[macro_export]\nmacro_rules ! input_inner { ( $ parser : ident ) => { } ; ( $ parser : ident , ) => { } ; ( $ parser : ident , $ var : ident : $ t : tt $ ( $ r : tt ) * ) => { let $ var = read_value ! ( $ parser , $ t ) ; input_inner ! { $ parser $ ( $ r ) * } } ; }\n#[macro_export]\nmacro_rules ! read_value { ( $ parser : ident , ( $ ( $ t : tt ) ,* ) ) => { ( $ ( read_value ! ( $ parser , $ t ) ) ,* ) } ; ( $ parser : ident , [ $ t : tt ; $ len : expr ] ) => { ( 0 ..$ len ) . map ( | _ | read_value ! ( $ parser , $ t ) ) . collect ::< Vec < _ >> ( ) } ; ( $ parser : ident , chars ) => { read_value ! ( $ parser , String ) . chars ( ) . collect ::< Vec < char >> ( ) } ; ( $ parser : ident , usize1 ) => { read_value ! ( $ parser , usize ) - 1 } ; ( $ parser : ident , $ t : ty ) => { $ parser . next ::<$ t > ( ) . expect ( \"Parse error\" ) } ; }\nuse std::io;\nuse std::io::BufRead;\nuse std::str;\npub struct Parser<R> {\n    reader: R,\n    buf: Vec<u8>,\n    pos: usize,\n}\nimpl Parser<io::Empty> {\n    pub fn from_str(s: &str) -> Parser<io::Empty> {\n        Parser {\n            reader: io::empty(),\n            buf: s.as_bytes().to_vec(),\n            pos: 0,\n        }\n    }\n}\nimpl<R: BufRead> Parser<R> {\n    pub fn new(reader: R) -> Parser<R> {\n        Parser {\n            reader: reader,\n            buf: vec![],\n            pos: 0,\n        }\n    }\n    pub fn update_buf(&mut self) {\n        self.buf.clear();\n        self.pos = 0;\n        loop {\n            let (len, complete) = {\n                let buf2 = self.reader.fill_buf().unwrap();\n                self.buf.extend_from_slice(buf2);\n                let len = buf2.len();\n                if len == 0 {\n                    break;\n                }\n                (len, buf2[len - 1] <= 0x20)\n            };\n            self.reader.consume(len);\n            if complete {\n                break;\n            }\n        }\n    }\n    pub fn next<T: str::FromStr>(&mut self) -> Result<T, T::Err> {\n        loop {\n            let mut begin = self.pos;\n            while begin < self.buf.len() && (self.buf[begin] <= 0x20) {\n                begin += 1;\n            }\n            let mut end = begin;\n            while end < self.buf.len() && (self.buf[end] > 0x20) {\n                end += 1;\n            }\n            if begin != self.buf.len() {\n                self.pos = end;\n                return str::from_utf8(&self.buf[begin..end]).unwrap().parse::<T>();\n            } else {\n                self.update_buf();\n            }\n        }\n    }\n}\n#[allow(unused_macros)]\nmacro_rules ! debug { ( $ ( $ a : expr ) ,* ) => { eprintln ! ( concat ! ( $ ( stringify ! ( $ a ) , \" = {:?}, \" ) ,* ) , $ ( $ a ) ,* ) ; } }\n#[doc = \" https://github.com/hatoo/competitive-rust-snippets\"]\nconst BIG_STACK_SIZE: bool = true;\n#[allow(dead_code)]\nfn main() {\n    use std::thread;\n    if BIG_STACK_SIZE {\n        thread::Builder::new()\n            .stack_size(32 * 1024 * 1024)\n            .name(\"solve\".into())\n            .spawn(solve)\n            .unwrap()\n            .join()\n            .unwrap();\n    } else {\n        solve();\n    }\n}\nfn solve() {\n    let out = stdout();\n    let mut out = BufWriter::new(out.lock());\n    input!{\n        new_stdin_parser = parser,\n        q:usize,\n    }\n    for _ in 0..q {\n        input!{\n            parser = parser,\n            h:usize,n:usize,\n            p:[usize;n],\n        }\n        let mut state = vec![false; h+1];\n        for pi in p {\n            state[pi] = true;\n        }\n        let mut magic = 0;\n        let mut cur = h;\n        while cur > 2 {\n            assert!(state[cur]);\n\n            let jump1 = cur-1;\n            let jump2 = cur-2;\n            // 2jump case\n            if state[jump1] && state[jump2] {\n                cur = jump2;\n            }\n            else if !state[jump1] {\n                state[jump1] = true;\n                cur = jump1;\n            }\n            else {\n                magic += 1;\n                state[jump2] = true;\n                cur = jump2;\n            }\n        }\n        writeln!(out,\"{}\",magic);\n    }\n}", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "19419ef1b8b2bad1daa96817856656ea", "src_uid": "d0c50562764f2008045fe57e5da5de1c", "difficulty": 1600}
  9. {"lang": "Rust", "source_code": "#[doc = \" https://github.com/hatoo/competitive-rust-snippets\"]\n#[allow(unused_imports)]\nuse std::cmp::{max, min, Ordering};\n#[allow(unused_imports)]\nuse std::collections::{BTreeMap, BTreeSet, BinaryHeap, HashMap, HashSet, VecDeque};\n#[allow(unused_imports)]\nuse std::iter::FromIterator;\n#[macro_export]\nmacro_rules ! chmax { ( $ x : expr , $ ( $ v : expr ) ,+ ) => { $ ( $ x = std :: cmp :: max ( $ x ,$ v ) ; ) + } ; }\n#[macro_export]\nmacro_rules ! chmin { ( $ x : expr , $ ( $ v : expr ) ,+ ) => { $ ( $ x = std :: cmp :: min ( $ x ,$ v ) ; ) + } ; }\n#[macro_export]\nmacro_rules ! max { ( $ x : expr ) => ( $ x ) ; ( $ x : expr , $ ( $ xs : expr ) ,+ ) => { std :: cmp :: max ( $ x , max ! ( $ ( $ xs ) ,+ ) ) } ; }\n#[macro_export]\nmacro_rules ! min { ( $ x : expr ) => ( $ x ) ; ( $ x : expr , $ ( $ xs : expr ) ,+ ) => { std :: cmp :: min ( $ x , min ! ( $ ( $ xs ) ,+ ) ) } ; }\n#[macro_export]\nmacro_rules ! dvec { ( $ t : expr ; $ len : expr ) => { vec ! [ $ t ; $ len ] } ; ( $ t : expr ; $ len : expr , $ ( $ rest : expr ) ,* ) => { vec ! [ dvec ! ( $ t ; $ ( $ rest ) ,* ) ; $ len ] } ; }\n#[doc = \" main\"]\n#[allow(unused_imports)]\nuse std::io::{stdin, stdout, BufWriter, Write};\n#[macro_export]\nmacro_rules ! input { ( source = $ s : expr , $ ( $ r : tt ) * ) => { let mut parser = Parser :: from_str ( $ s ) ; input_inner ! { parser , $ ( $ r ) * } } ; ( parser = $ parser : ident , $ ( $ r : tt ) * ) => { input_inner ! { $ parser , $ ( $ r ) * } } ; ( new_stdin_parser = $ parser : ident , $ ( $ r : tt ) * ) => { let stdin = std :: io :: stdin ( ) ; let reader = std :: io :: BufReader :: new ( stdin . lock ( ) ) ; let mut $ parser = Parser :: new ( reader ) ; input_inner ! { $ parser , $ ( $ r ) * } } ; ( $ ( $ r : tt ) * ) => { input ! { new_stdin_parser = parser , $ ( $ r ) * } } ; }\n#[macro_export]\nmacro_rules ! input_inner { ( $ parser : ident ) => { } ; ( $ parser : ident , ) => { } ; ( $ parser : ident , $ var : ident : $ t : tt $ ( $ r : tt ) * ) => { let $ var = read_value ! ( $ parser , $ t ) ; input_inner ! { $ parser $ ( $ r ) * } } ; }\n#[macro_export]\nmacro_rules ! read_value { ( $ parser : ident , ( $ ( $ t : tt ) ,* ) ) => { ( $ ( read_value ! ( $ parser , $ t ) ) ,* ) } ; ( $ parser : ident , [ $ t : tt ; $ len : expr ] ) => { ( 0 ..$ len ) . map ( | _ | read_value ! ( $ parser , $ t ) ) . collect ::< Vec < _ >> ( ) } ; ( $ parser : ident , chars ) => { read_value ! ( $ parser , String ) . chars ( ) . collect ::< Vec < char >> ( ) } ; ( $ parser : ident , usize1 ) => { read_value ! ( $ parser , usize ) - 1 } ; ( $ parser : ident , $ t : ty ) => { $ parser . next ::<$ t > ( ) . expect ( \"Parse error\" ) } ; }\nuse std::io;\nuse std::io::BufRead;\nuse std::str;\npub struct Parser<R> {\n    reader: R,\n    buf: Vec<u8>,\n    pos: usize,\n}\nimpl Parser<io::Empty> {\n    pub fn from_str(s: &str) -> Parser<io::Empty> {\n        Parser {\n            reader: io::empty(),\n            buf: s.as_bytes().to_vec(),\n            pos: 0,\n        }\n    }\n}\nimpl<R: BufRead> Parser<R> {\n    pub fn new(reader: R) -> Parser<R> {\n        Parser {\n            reader: reader,\n            buf: vec![],\n            pos: 0,\n        }\n    }\n    pub fn update_buf(&mut self) {\n        self.buf.clear();\n        self.pos = 0;\n        loop {\n            let (len, complete) = {\n                let buf2 = self.reader.fill_buf().unwrap();\n                self.buf.extend_from_slice(buf2);\n                let len = buf2.len();\n                if len == 0 {\n                    break;\n                }\n                (len, buf2[len - 1] <= 0x20)\n            };\n            self.reader.consume(len);\n            if complete {\n                break;\n            }\n        }\n    }\n    pub fn next<T: str::FromStr>(&mut self) -> Result<T, T::Err> {\n        loop {\n            let mut begin = self.pos;\n            while begin < self.buf.len() && (self.buf[begin] <= 0x20) {\n                begin += 1;\n            }\n            let mut end = begin;\n            while end < self.buf.len() && (self.buf[end] > 0x20) {\n                end += 1;\n            }\n            if begin != self.buf.len() {\n                self.pos = end;\n                return str::from_utf8(&self.buf[begin..end]).unwrap().parse::<T>();\n            } else {\n                self.update_buf();\n            }\n        }\n    }\n}\n#[allow(unused_macros)]\nmacro_rules ! debug { ( $ ( $ a : expr ) ,* ) => { eprintln ! ( concat ! ( $ ( stringify ! ( $ a ) , \" = {:?}, \" ) ,* ) , $ ( $ a ) ,* ) ; } }\n#[doc = \" https://github.com/hatoo/competitive-rust-snippets\"]\nconst BIG_STACK_SIZE: bool = true;\n#[allow(dead_code)]\nfn main() {\n    use std::thread;\n    if BIG_STACK_SIZE {\n        thread::Builder::new()\n            .stack_size(32 * 1024 * 1024)\n            .name(\"solve\".into())\n            .spawn(solve)\n            .unwrap()\n            .join()\n            .unwrap();\n    } else {\n        solve();\n    }\n}\nfn solve() {\n    let out = stdout();\n    let mut out = BufWriter::new(out.lock());\n    input!{\n        new_stdin_parser = parser,\n        q:usize,\n    }\n    for _ in 0..q {\n        input!{\n            parser = parser,\n            h:usize,n:usize,\n            P:[usize;n],\n        }\n        let mut P = P;\n        P.push(0);\n        let mut state = HashSet::new();\n        for &Pi in &P {\n            state.insert(Pi);\n        }\n        let mut magic = 0;\n        let mut cur = h;\n        while cur > 2 {\n            assert!(state.contains(&cur));\n\n            let jump1 = cur-1;\n            let jump2 = cur-2;\n            // 2jump case\n            if state.contains(&jump1) && state.contains(&jump2) {\n                state.remove(&cur);\n                state.remove(&jump1);\n                cur = jump2;\n            }\n            else if !state.contains(&jump1) {\n                let bs = BinarySearch {\n                    lower: 0,\n                    upper: (n-1) as i64,\n                    p: |i:i64| {\n                        let i = i as usize;\n                        P[i] < cur\n                    },\n                };\n                let r = bs.lower_bound() as usize;\n                state.remove(&cur);\n                cur = P[r] + 1;\n                state.insert(cur);\n            }\n            else {\n                magic += 1;\n                state.remove(&cur);\n                state.remove(&jump1);\n                state.insert(jump2); // magic\n                cur = jump2;\n            }\n            // dbg!(cur);\n        }\n        // println!(\"{}\",magic);\n        writeln!(out,\"{}\",magic);\n    }\n}\n\n#[doc = \"lower,upper are inclusive range\"]\npub struct BinarySearch<F> {\n    pub p: F,\n    pub lower: i64,\n    pub upper: i64,\n}\nimpl<F: Fn(i64) -> bool> BinarySearch<F> {\n    #[doc = \"O(log(upper-lower))\"]\n    pub fn lower_bound(&self) -> i64 {\n        let lower = self.lower;\n        let upper = self.upper;\n        assert!(lower <= upper);\n        let mut lb = lower - 1;\n        let mut ub = upper + 1;\n        while ub - lb > 1 {\n            let mid = (lb + ub) / 2;\n            if (self.p)(mid) {\n                ub = mid;\n            } else {\n                lb = mid;\n            }\n        }\n        let latter = ub;\n        latter\n    }\n}", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "3d16e1247c3d3b72aaa241055c123a56", "src_uid": "d0c50562764f2008045fe57e5da5de1c", "difficulty": 1600}
  10. {"lang": "Rust", "source_code": "mod union_find {\n    pub struct UF {\n        p: Vec<i32>,\n    }\n    #[allow(dead_code)]\n    impl UF {\n        pub fn new(n: usize) -> UF {\n            UF {p: vec![-1; n] }\n        }\n        pub fn root(&mut self, mut x: usize) -> usize {\n            while self.p[x] >= 0 {\n                x = self.p[x] as usize;\n            }\n            x\n        }\n        pub fn same(&mut self, x: usize, y: usize) -> bool {\n            self.root(x) == self.root(y)\n        }\n        pub fn unite(&mut self, mut x: usize, mut y: usize) {\n            x = self.root(x);\n            y = self.root(y);\n            if x == y {\n                return;\n            }\n            if self.p[x] > self.p[y] {\n                std::mem::swap(&mut x, &mut y);\n            }\n            self.p[x] += self.p[y];\n            self.p[y] = x as i32;\n        }\n        pub fn get_size(&mut self, x: usize) -> usize {\n            let r = self.root(x);\n            (-self.p[r]) as usize\n        }\n    }\n}\n//https://qiita.com/tanakh/items/0ba42c7ca36cd29d0ac8 \u3088\u308a\nmacro_rules! input {\n    (source = $s:expr, $($r:tt)*) => {\n        let mut iter = $s.split_whitespace();\n        input_inner!{iter, $($r)*}\n    };\n    ($($r:tt)*) => {\n        let s = {\n            use std::io::Read;\n            let mut s = String::new();\n            std::io::stdin().read_to_string(&mut s).unwrap();\n            s\n        };\n        let mut iter = s.split_whitespace();\n        input_inner!{iter, $($r)*}\n    };\n}\n\nmacro_rules! input_inner {\n    ($iter:expr) => {};\n    ($iter:expr, ) => {};\n    ($iter:expr, $var:ident : $t:tt $($r:tt)*) => {\n        let $var = read_value!($iter, $t);\n        input_inner!{$iter $($r)*}\n    };\n}\n\nmacro_rules! read_value {\n    ($iter:expr, ( $($t:tt),* )) => {\n        ( $(read_value!($iter, $t)),* )\n    };\n    ($iter:expr, [ $t:tt ; $len:expr ]) => {\n        (0..$len).map(|_| read_value!($iter, $t)).collect::<Vec<_>>()\n    };\n    ($iter:expr, chars) => {\n        read_value!($iter, String).chars().collect::<Vec<char>>()\n    };\n    ($iter:expr, usize1) => {\n        read_value!($iter, usize) - 1\n    };\n    ($iter:expr, $t:ty) => {\n        $iter.next().unwrap().parse::<$t>().expect(\"Parse error\")\n    };\n}\n\n// \u3053\u3053\u307e\u3067\n\nfn run() {\n    input! {\n        n: usize,\n        m: usize,\n        a: [u64; n],\n        e: [(usize, usize, u64); m],\n    }\n    let mut k = 0;\n    let mut a: Vec<(u64, usize)> = a.into_iter().map(|x| {k += 1; (x, k)}).collect();\n    a.sort();\n    let mut e: Vec<(u64, usize, usize)> = e.into_iter().map(|(a, b, w)| (w, a, b)).collect();\n    let (c, x) = a[0];\n    for &(w, v) in a[1..].iter() {\n        e.push((c + w, x, v));\n    }\n    e.sort();\n    let mut u = union_find::UF::new(n + 1);\n    let mut cost = 0;\n    for (c, a, b) in e {\n        if !u.same(a, b) {\n            u.unite(a, b);\n            cost += c;\n        }\n    }\n    println!(\"{}\", cost);\n}\n\nfn main() {\n    run();\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "f9842aa8632955e94473a732792a682b", "src_uid": "e52ec2fa5bcf5d2027d57b0694b4e15a", "difficulty": 1900}
  11. {"lang": "Rust", "source_code": "#[allow(unused_imports)]\nuse std::cmp::*;\n#[allow(unused_imports)]\nuse std::collections::*;\nuse std::io::{Write, BufWriter};\n// https://qiita.com/tanakh/items/0ba42c7ca36cd29d0ac8\nmacro_rules! input {\n    (source = $s:expr, $($r:tt)*) => {\n        let mut iter = $s.split_whitespace();\n        let mut next = || { iter.next().unwrap() };\n        input_inner!{next, $($r)*}\n    };\n    ($($r:tt)*) => {\n        let stdin = std::io::stdin();\n        let mut bytes = std::io::Read::bytes(std::io::BufReader::new(stdin.lock()));\n        let mut next = move || -> String{\n            bytes\n                .by_ref()\n                .map(|r|r.unwrap() as char)\n                .skip_while(|c|c.is_whitespace())\n                .take_while(|c|!c.is_whitespace())\n                .collect()\n        };\n        input_inner!{next, $($r)*}\n    };\n}\n\nmacro_rules! input_inner {\n    ($next:expr) => {};\n    ($next:expr, ) => {};\n\n    ($next:expr, $var:ident : $t:tt $($r:tt)*) => {\n        let $var = read_value!($next, $t);\n        input_inner!{$next $($r)*}\n    };\n}\n\nmacro_rules! read_value {\n    ($next:expr, ( $($t:tt),* )) => {\n        ( $(read_value!($next, $t)),* )\n    };\n\n    ($next:expr, [ $t:tt ; $len:expr ]) => {\n        (0..$len).map(|_| read_value!($next, $t)).collect::<Vec<_>>()\n    };\n\n    ($next:expr, chars) => {\n        read_value!($next, String).chars().collect::<Vec<char>>()\n    };\n\n    ($next:expr, usize1) => {\n        read_value!($next, usize) - 1\n    };\n\n    ($next:expr, [ $t:tt ]) => {{\n        let len = read_value!($next, usize);\n        (0..len).map(|_| read_value!($next, $t)).collect::<Vec<_>>()\n    }};\n\n    ($next:expr, $t:ty) => {\n        $next().parse::<$t>().expect(\"Parse error\")\n    };\n}\n\nfn solve() {\n    let out = std::io::stdout();\n    let mut out = BufWriter::new(out.lock());\n    macro_rules! puts {\n        ($($format:tt)*) => (write!(out,$($format)*).unwrap());\n    }\n    input! {\n        n: usize,\n        m: usize,\n        a: [i64; n],\n        xyw: [(usize1, usize1, i64); m],\n    }\n    let mut g = vec![Vec::new(); n];\n    for (x, y, w) in xyw {\n        g[x].push((y, w));\n        g[y].push((x, w));\n    }\n    let mut amin = (1 << 50, n);\n    for i in 0 .. n { amin = min(amin, (a[i], i)); }\n    // Prim\n    let mut tot = 0;\n    let (added, init) = amin;\n    let mut used = vec![false; n];\n    used[init] = true;\n    let mut que = BinaryHeap::new();\n    for i in 0 .. n {\n        if init != i {\n            que.push(Reverse((a[i] + added, i)));\n        }\n    }\n    for &(w, cost) in g[init].iter() {\n        que.push(Reverse((cost, w)));\n    }\n    while let Some(Reverse((cost, v))) = que.pop() {\n        if used[v] { continue; }\n        tot += cost;\n        used[v] = true;\n        for &(w, cost) in g[v].iter() {\n            que.push(Reverse((cost, w)));\n        }\n    }\n    puts!(\"{}\\n\", tot)\n}\n\nfn main() {\n    // In order to avoid potential stack overflow, spawn a new thread.\n    let stack_size = 104_857_600; // 100 MB\n    let thd = std::thread::Builder::new().stack_size(stack_size);\n    thd.spawn(|| solve()).unwrap().join().unwrap();\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "b16b7d0fe6e78d2642950b033861c461", "src_uid": "e52ec2fa5bcf5d2027d57b0694b4e15a", "difficulty": 1900}
  12. {"lang": "Rust", "source_code": "#[allow(unused_imports)]\nuse std::cmp::{min,max};\n#[allow(unused_imports)]\nuse std::collections::{BTreeMap,BTreeSet};\n#[allow(unused_imports)]\nuse std::ops::*;\n#[allow(unused_imports)]\nuse std::collections::BinaryHeap;\n\n#[allow(unused_macros)]\nmacro_rules! ite {\n    ($c:expr, $t:expr, $f:expr) => {{\n        if $c { $t } else { $f }\n    }};\n}\n\n// ref: tanakh <https://qiita.com/tanakh/items/0ba42c7ca36cd29d0ac8>\n// diff: using Parser\n#[macro_export]\nmacro_rules! input {\n    (source = $s:expr, $($r:tt)*) => {\n        let mut parser = Parser::from_str($s);\n        input_inner!{parser, $($r)*}\n    };\n    (parser = $parser:ident, $($r:tt)*) => {\n        input_inner!{$parser, $($r)*}\n    };\n    (new_stdin_parser = $parser:ident, $($r:tt)*) => {\n        let stdin = std::io::stdin();\n        let reader = std::io::BufReader::new(stdin.lock());\n        let mut $parser = Parser::new(reader);\n        input_inner!{$parser, $($r)*}\n    };\n    ($($r:tt)*) => {\n        input!{new_stdin_parser = parser, $($r)*}\n    };\n}\n\n#[macro_export]\nmacro_rules! input_inner {\n    ($parser:ident) => {};\n    ($parser:ident, ) => {};\n    ($parser:ident, $var:ident : $t:tt $($r:tt)*) => {\n        let $var = read_value!($parser, $t);\n        input_inner!{$parser $($r)*}\n    };\n}\n\n#[macro_export]\nmacro_rules! read_value {\n    ($parser:ident, ( $($t:tt),* )) => {\n        ( $(read_value!($parser, $t)),* )\n    };\n    ($parser:ident, [ $t:tt ; $len:expr ]) => {\n        (0..$len).map(|_| read_value!($parser, $t)).collect::<Vec<_>>()\n    };\n    ($parser:ident, chars) => {\n        read_value!($parser, String).chars().collect::<Vec<char>>()\n    };\n    ($parser:ident, usize1) => {\n        read_value!($parser, usize) - 1\n    };\n    ($parser:ident, $t:ty) => {\n        $parser.next::<$t>().expect(\"Parse error\")\n    };\n}\n\nfn main() {\n    input! {\n        n: usize,\n        m: usize,\n        xs: [i64; n],\n        es: [(usize1, usize1, i64); m]\n    }\n    let mut offers = vec![BinaryHeap::new(); n];\n    for &(x,y,w) in &es {\n        offers[x].push((-w,y));\n        offers[y].push((-w,x));\n    }\n    let mut used = vec![false; n];\n\n    let first = 0;\n\n    used[first] = true;\n    let mut used_count = 1;\n    let mut unused_heap = BinaryHeap::new();\n    for i in 0..n {\n        unused_heap.push((-xs[i], i));\n    }\n\n    let mut left_offers = BinaryHeap::new();\n    let mut left_min = xs[first];\n    left_offers.append(&mut offers[first]);\n\n    let mut res = 0;\n    while used_count < n {\n        while let Some((nw, next)) = left_offers.pop() {\n            if ! used[next] {\n                left_offers.push((nw, next));\n                break;\n            }\n        }\n        while let Some((nw, v)) = unused_heap.pop() {\n            if ! used[v] {\n                unused_heap.push((nw, v));\n                break;\n            }\n        }\n        let mut min_next = None;\n        let mut min_cost = None;\n        if let Some(&(nw, next)) = left_offers.peek() {\n            let t = -nw;\n            if min_cost.is_none() || min_cost.unwrap() > t {\n                min_cost = Some(t);\n                min_next = Some(next);\n            }\n        }\n        if let Some(&(nw, next)) = unused_heap.peek() {\n            let t = left_min + -nw;\n            if min_cost.is_none() || min_cost.unwrap() > t {\n                min_cost = Some(t);\n                min_next = Some(next);\n            }\n        }\n\n        left_offers.append(&mut offers[min_next.unwrap()]);\n        left_min = min(left_min, xs[min_next.unwrap()]);\n        res += min_cost.unwrap();\n        used[min_next.unwrap()] = true;\n\n        used_count += 1;\n    }\n    println!(\"{}\", res);\n}\n\nuse std::io::BufRead;\nuse std::io;\nuse std::str;\n\n// ref: tatsuya6502 <https://qiita.com/tatsuya6502/items/cd448486f7ef7b5b8c7e>\n// ref: wariuni <https://qiita.com/tatsuya6502/items/cd448486f7ef7b5b8c7e#comment-7040a5ae96305e884eb9>\n// diff: using std::io::BufRead::fill_buf()\npub struct Parser<R> {\n    reader: R,\n    buf: Vec<u8>,\n    pos: usize,\n}\n\nimpl Parser<io::Empty> {\n    pub fn from_str(s: &str) -> Parser<io::Empty> {\n        Parser {\n            reader: io::empty(),\n            buf: s.as_bytes().to_vec(),\n            pos: 0,\n        }\n    }\n}\n\nimpl<R:BufRead> Parser<R> {\n    pub fn new(reader: R) -> Parser<R> {\n        Parser {\n            reader: reader,\n            buf: vec![],\n            pos: 0,\n        }\n    }\n    pub fn update_buf(&mut self) {\n        self.buf.clear();\n        self.pos = 0;\n        loop {\n            let (len,complete) = {\n                let buf2 = self.reader.fill_buf().unwrap();\n                self.buf.extend_from_slice(buf2);\n                let len = buf2.len();\n                (len, buf2[len-1] <= 0x20)\n            };\n            self.reader.consume(len);\n            if complete {\n                break;\n            }\n        }\n    }\n    pub fn next<T:str::FromStr>(&mut self) -> Result<T, T::Err> {\n        loop {\n            let mut begin = self.pos;\n            while begin < self.buf.len() && (self.buf[begin] <= 0x20) {\n                begin += 1;\n            }\n            let mut end = begin;\n            while end < self.buf.len() && (self.buf[end] > 0x20) {\n                end += 1;\n            }\n            if begin != self.buf.len() {\n                self.pos = end;\n                return str::from_utf8(&self.buf[begin..end]).unwrap().parse::<T>();\n            }\n            else {\n                self.update_buf();\n            }\n        }\n    }\n}\n\nuse std::fmt::Display;\n#[allow(dead_code)]\nfn write_vec<T: Display>(xs: &Vec<T>) {\n    if xs.len() == 0 {\n        println!();\n        return;\n    }\n    print!(\"{}\", xs[0]);\n    for i in 1..xs.len() {\n        print!(\" {}\", xs[i]);\n    }\n    println!();\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "fdbf3a62685242bd099d947dddc8cddf", "src_uid": "e52ec2fa5bcf5d2027d57b0694b4e15a", "difficulty": 1900}
  13. {"lang": "Rust", "source_code": "#![allow(unused_variables)]\n#![allow(unused_must_use)]\n#![allow(unused_imports)]\nuse std::collections::BinaryHeap;\nuse std::collections::BTreeSet;\nuse std::collections::HashMap;\nuse std::collections::HashSet;\nuse std::io::{self, prelude::*};\nuse std::cmp::{min,max};\nuse std::cmp::Reverse;\n\n\n\n\nfn collapse(x: &usize, uf: &mut Vec<usize>) {\n    let mut xs = vec![];\n    let mut y = *x;\n\n    while uf[y] != y {\n       xs.push(y);\n       y = uf[y];\n    }\n\n    for i in 0..xs.len() {\n        uf[xs[i]] = y;\n    }\n}\n\nfn solve<R: BufRead, W: Write>(mut input: FastInput<R>, mut w: W) {\n    let n: usize = input.token();\n    let m: usize = input.token();\n\n    let mut vs = vec![];\n    let mut uf = vec![];\n    let mut components = n;\n\n    for i in 0..n {\n        let ai: i64 = input.token();\n        vs.push((ai, i));\n        uf.push(i);\n    }\n\n    vs.sort();\n\n\n    let mut es = vec![];\n\n    for i in 0..m {\n        let a: usize = input.token();\n        let b: usize = input.token();\n        let w: i64 = input.token();\n        es.push((w, a - 1, b - 1));\n    }\n\n    let mut heap = BinaryHeap::new();\n\n    for i in 0..es.len() {\n        heap.push(Reverse((es[i].0, es[i].1, es[i].2)));\n    }\n\n    for i in 1..n {\n        heap.push(Reverse((vs[0].0 + vs[i].0, vs[i].1, vs[0].1)));\n    }\n\n    let mut total_cost: i64 = 0;\n\n    while let Some(Reverse((v, x, y))) = heap.pop() {\n        // println!(\"Processing {}-{} ({})\", x, y, v);\n        collapse(&x, &mut uf);\n        collapse(&y, &mut uf);\n        if uf[y] == uf[x] {\n            // println!(\"skip\");\n            continue;\n        }\n        /*\n        for i in 0..n {\n            print!(\"({} -> {})\", i, uf[i]);\n        }\n        println!(\"\");\n        */\n        let z = uf[y];\n        uf[z] = uf[x];\n        uf[z] = uf[x];\n        components -= 1;\n        total_cost += v as i64;\n        \n        if components == 1 {\n            break;\n        }\n    }\n\n    write!(w, \"{}\\n\", total_cost);\n}\n\nfn main() {\n    let stdin = io::stdin();\n    let stdout = io::stdout();\n    let input = FastInput::from(stdin.lock());\n    let writer = io::BufWriter::new(stdout.lock());\n    solve(input, writer);\n}\n\ntrait TokenStream<T> {\n    fn token(&mut self) -> T;\n}\n\nstruct FastInput<R> {\n    stdin: R,\n    pos: usize,\n}\n\nimpl<R: BufRead> From<R> for FastInput<R> {\n    fn from(r: R) -> Self {\n        FastInput { stdin: r, pos: 0 }\n    }\n}\n\nimpl<R: BufRead> TokenStream<u8> for FastInput<R> {\n    fn token(&mut self) -> u8 {\n        loop {\n            if let Ok(buf) = self.stdin.fill_buf() {\n                while self.pos < buf.len() {\n                    self.pos += 1;\n                    if buf[self.pos - 1] > 32 {\n                        return buf[self.pos - 1];\n                    }\n                }\n                if self.pos == 0 {\n                    return 0;\n                }\n            } else {\n                return 0;\n            }\n            self.stdin.consume(self.pos);\n            self.pos = 0;\n        }\n    }\n}\n\nimpl<R: BufRead> TokenStream<Vec<u8>> for FastInput<R> {\n    fn token(&mut self) -> Vec<u8> {\n        let mut ans = Vec::new();\n        let mut parse_token = false;\n        loop {\n            if let Ok(buf) = self.stdin.fill_buf() {\n                if !parse_token {\n                    while self.pos < buf.len() && buf[self.pos] <= 32 {\n                        self.pos += 1;\n                    }\n                }\n                while self.pos < buf.len() && buf[self.pos] > 32 {\n                    parse_token = true;\n                    ans.push(buf[self.pos]);\n                    self.pos += 1;\n                }\n                if self.pos != buf.len() || self.pos == 0 {\n                    return ans;\n                }\n            }\n            self.stdin.consume(self.pos);\n            self.pos = 0;\n        }\n    }\n}\n\nmacro_rules! impl_token_stream {\n    ($($t:ident),+) => {$(\n        impl<R: BufRead> TokenStream<$t> for FastInput<R> {\n           fn token(&mut self) -> $t {\n                let mut ans = 0;\n                let mut parse_token = false;\n                loop {\n                    if let Ok(buf) = self.stdin.fill_buf() {\n                        if !parse_token {\n                            while self.pos < buf.len() && buf[self.pos] <= 32 {\n                                self.pos += 1;\n                            }\n                        }\n                        while self.pos < buf.len() && buf[self.pos] > 32 {\n                            parse_token = true;\n                            ans = ans * 10 + (buf[self.pos] - b'0') as $t;\n                            self.pos += 1;\n                        }\n                        if self.pos != buf.len() || self.pos == 0 {\n                            return ans;\n                        }\n                    }\n                    self.stdin.consume(self.pos);\n                    self.pos = 0;\n                }\n           }\n        }\n    )+}\n}\n\nimpl_token_stream!(usize);\nimpl_token_stream!(i64);\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "b9c5cbd0fe408301cbd316e9aacf92aa", "src_uid": "e52ec2fa5bcf5d2027d57b0694b4e15a", "difficulty": 1900}
  14. {"lang": "Rust", "source_code": "#![allow(unused_variables)]\n#![allow(unused_must_use)]\n#![allow(unused_imports)]\nuse std::collections::BinaryHeap;\nuse std::collections::BTreeSet;\nuse std::collections::HashMap;\nuse std::collections::HashSet;\nuse std::io::{self, prelude::*};\nuse std::cmp::{min,max};\nuse std::cmp::Reverse;\n\n\n\n#[derive(Debug, Ord, Eq, PartialEq, PartialOrd)]\nenum Edge {\n    Normal,\n    Offer,\n} \n\nfn collapse(x: &usize, uf: &mut Vec<usize>) {\n    let mut xs = vec![];\n    let mut y = *x;\n\n    while uf[y] != y {\n       xs.push(y);\n       y = uf[y];\n    }\n\n    for i in 0..xs.len() {\n        uf[xs[i]] = y;\n    }\n}\n\nfn solve<R: BufRead, W: Write>(mut input: FastInput<R>, mut w: W) {\n    let n: usize = input.token();\n    let m: usize = input.token();\n\n    let mut vs = vec![];\n    let mut uf = vec![];\n    let mut indexes = HashMap::new();\n    let mut components = n;\n\n    for i in 0..n {\n        let ai: usize = input.token();\n        vs.push((ai, i));\n        uf.push(i);\n    }\n\n    vs.sort();\n\n    for i in 0..n {\n        indexes.insert(vs[i].1, i);\n    }\n\n    let mut es = vec![];\n\n    for i in 0..m {\n        let a: usize = input.token();\n        let b: usize = input.token();\n        let w: usize = input.token();\n        if vs[indexes[&(a - 1)]].0 + vs[indexes[&(b - 1)]].0 > w {\n            es.push((w, a - 1, b - 1));\n        }\n    }\n\n    let mut heap = BinaryHeap::new();\n\n    for i in 0..es.len() {\n        heap.push(Reverse((es[i].0, es[i].1, es[i].2, Edge::Offer)));\n    }\n\n    for i in 1..n {\n        heap.push(Reverse((vs[0].0 + vs[i].0, vs[i].1, vs[0].1, Edge::Normal)));\n    }\n\n    let mut total_cost = 0;\n\n    while let Some(Reverse((v, x, y, t))) = heap.pop() {\n        // println!(\"Processing {}-{} ({}, {:?})\", x, y, v, t);\n        collapse(&x, &mut uf);\n        collapse(&y, &mut uf);\n        if uf[y] == uf[x] {\n            // println!(\"skip\");\n            continue;\n        }\n        /*\n        for i in 0..n {\n            print!(\"({} -> {})\", i, uf[i]);\n        }\n        println!(\"\");\n        */\n        let z = uf[y];\n        uf[z] = uf[x];\n        components -= 1;\n        total_cost += v;\n        \n        if components == 1 {\n            break;\n        }\n\n        if t == Edge::Normal {\n            let mut new_y = vs[indexes[&y] + 1].1;\n            if new_y == x {\n                new_y = vs[indexes[&y] + 2].1;\n            }\n            let new_v = vs[indexes[&new_y]].0 + vs[indexes[&x]].0;\n            // println!(\"Add {}-{}, {}\", x,y,v);\n            heap.push(Reverse((new_v, x, new_y, Edge::Normal)));\n        }\n    }\n\n    write!(w, \"{}\\n\", total_cost);\n}\n\nfn main() {\n    let stdin = io::stdin();\n    let stdout = io::stdout();\n    let input = FastInput::from(stdin.lock());\n    let writer = io::BufWriter::new(stdout.lock());\n    solve(input, writer);\n}\n\ntrait TokenStream<T> {\n    fn token(&mut self) -> T;\n}\n\nstruct FastInput<R> {\n    stdin: R,\n    pos: usize,\n}\n\nimpl<R: BufRead> From<R> for FastInput<R> {\n    fn from(r: R) -> Self {\n        FastInput { stdin: r, pos: 0 }\n    }\n}\n\nimpl<R: BufRead> TokenStream<u8> for FastInput<R> {\n    fn token(&mut self) -> u8 {\n        loop {\n            if let Ok(buf) = self.stdin.fill_buf() {\n                while self.pos < buf.len() {\n                    self.pos += 1;\n                    if buf[self.pos - 1] > 32 {\n                        return buf[self.pos - 1];\n                    }\n                }\n                if self.pos == 0 {\n                    return 0;\n                }\n            } else {\n                return 0;\n            }\n            self.stdin.consume(self.pos);\n            self.pos = 0;\n        }\n    }\n}\n\nimpl<R: BufRead> TokenStream<Vec<u8>> for FastInput<R> {\n    fn token(&mut self) -> Vec<u8> {\n        let mut ans = Vec::new();\n        let mut parse_token = false;\n        loop {\n            if let Ok(buf) = self.stdin.fill_buf() {\n                if !parse_token {\n                    while self.pos < buf.len() && buf[self.pos] <= 32 {\n                        self.pos += 1;\n                    }\n                }\n                while self.pos < buf.len() && buf[self.pos] > 32 {\n                    parse_token = true;\n                    ans.push(buf[self.pos]);\n                    self.pos += 1;\n                }\n                if self.pos != buf.len() || self.pos == 0 {\n                    return ans;\n                }\n            }\n            self.stdin.consume(self.pos);\n            self.pos = 0;\n        }\n    }\n}\n\nmacro_rules! impl_token_stream {\n    ($($t:ident),+) => {$(\n        impl<R: BufRead> TokenStream<$t> for FastInput<R> {\n           fn token(&mut self) -> $t {\n                let mut ans = 0;\n                let mut parse_token = false;\n                loop {\n                    if let Ok(buf) = self.stdin.fill_buf() {\n                        if !parse_token {\n                            while self.pos < buf.len() && buf[self.pos] <= 32 {\n                                self.pos += 1;\n                            }\n                        }\n                        while self.pos < buf.len() && buf[self.pos] > 32 {\n                            parse_token = true;\n                            ans = ans * 10 + (buf[self.pos] - b'0') as $t;\n                            self.pos += 1;\n                        }\n                        if self.pos != buf.len() || self.pos == 0 {\n                            return ans;\n                        }\n                    }\n                    self.stdin.consume(self.pos);\n                    self.pos = 0;\n                }\n           }\n        }\n    )+}\n}\n\nimpl_token_stream!(usize);\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "debfc82b21595e9df45a98e9516ab86f", "src_uid": "e52ec2fa5bcf5d2027d57b0694b4e15a", "difficulty": 1900}
  15. {"lang": "Rust", "source_code": "#![allow(unused_variables)]\n#![allow(unused_must_use)]\n#![allow(unused_imports)]\nuse std::collections::BinaryHeap;\nuse std::collections::BTreeSet;\nuse std::collections::HashMap;\nuse std::collections::HashSet;\nuse std::io::{self, prelude::*};\nuse std::cmp::{min,max};\nuse std::cmp::Reverse;\n\n\n\n#[derive(Debug, Ord, Eq, PartialEq, PartialOrd)]\nenum Edge {\n    Normal,\n    Offer,\n} \n\nfn collapse(x: &usize, uf: &mut Vec<usize>) {\n    let mut xs = vec![];\n    let mut y = *x;\n\n    while uf[y] != y {\n       xs.push(y);\n       y = uf[y];\n    }\n\n    for i in 0..xs.len() {\n        uf[xs[i]] = y;\n    }\n}\n\nfn solve<R: BufRead, W: Write>(mut input: FastInput<R>, mut w: W) {\n    let n: usize = input.token();\n    let m: usize = input.token();\n\n    let mut vs = vec![];\n    let mut uf = vec![];\n    let mut indexes = HashMap::new();\n    let mut components = n;\n\n    for i in 0..n {\n        let ai: usize = input.token();\n        vs.push((ai, i));\n        uf.push(i);\n    }\n\n    vs.sort();\n\n    for i in 0..n {\n        indexes.insert(vs[i].1, i);\n    }\n\n    let mut es = vec![];\n\n    for i in 0..m {\n        let a: usize = input.token();\n        let b: usize = input.token();\n        let w: usize = input.token();\n        if vs[indexes[&(a - 1)]].0 + vs[indexes[&(b - 1)]].0 > w {\n            es.push((w, a - 1, b - 1));\n        }\n    }\n\n    let mut heap = BinaryHeap::new();\n\n    for i in 0..es.len() {\n        heap.push(Reverse((es[i].0, es[i].1, es[i].2, Edge::Offer)));\n    }\n\n    for i in 1..n {\n        heap.push(Reverse((vs[0].0 + vs[i].0, vs[i].1, vs[0].1, Edge::Normal)));\n    }\n\n    let mut total_cost = 0;\n\n    while let Some(Reverse((v, x, y, t))) = heap.pop() {\n        // println!(\"Processing {}-{} ({}, {:?})\", x, y, v, t);\n        collapse(&x, &mut uf);\n        collapse(&y, &mut uf);\n        if uf[y] == uf[x] {\n            // println!(\"skip\");\n            continue;\n        }\n        /*\n        for i in 0..n {\n            print!(\"({} -> {})\", i, uf[i]);\n        }\n        println!(\"\");\n        */\n        let z = uf[y];\n        uf[z] = uf[x];\n        components -= 1;\n        total_cost += v;\n        \n        if components == 1 {\n            break;\n        }\n\n        if t == Edge::Normal {\n            let mut new_y = vs[indexes[&y] + 1].1;\n            if new_y == x {\n                new_y += 1;\n            }\n            let new_v = vs[indexes[&new_y]].0 + vs[indexes[&x]].0;\n            heap.push(Reverse((new_v, x, new_y, Edge::Normal)));\n        }\n    }\n\n    write!(w, \"{}\\n\", total_cost);\n}\n\nfn main() {\n    let stdin = io::stdin();\n    let stdout = io::stdout();\n    let input = FastInput::from(stdin.lock());\n    let writer = io::BufWriter::new(stdout.lock());\n    solve(input, writer);\n}\n\ntrait TokenStream<T> {\n    fn token(&mut self) -> T;\n}\n\nstruct FastInput<R> {\n    stdin: R,\n    pos: usize,\n}\n\nimpl<R: BufRead> From<R> for FastInput<R> {\n    fn from(r: R) -> Self {\n        FastInput { stdin: r, pos: 0 }\n    }\n}\n\nimpl<R: BufRead> TokenStream<u8> for FastInput<R> {\n    fn token(&mut self) -> u8 {\n        loop {\n            if let Ok(buf) = self.stdin.fill_buf() {\n                while self.pos < buf.len() {\n                    self.pos += 1;\n                    if buf[self.pos - 1] > 32 {\n                        return buf[self.pos - 1];\n                    }\n                }\n                if self.pos == 0 {\n                    return 0;\n                }\n            } else {\n                return 0;\n            }\n            self.stdin.consume(self.pos);\n            self.pos = 0;\n        }\n    }\n}\n\nimpl<R: BufRead> TokenStream<Vec<u8>> for FastInput<R> {\n    fn token(&mut self) -> Vec<u8> {\n        let mut ans = Vec::new();\n        let mut parse_token = false;\n        loop {\n            if let Ok(buf) = self.stdin.fill_buf() {\n                if !parse_token {\n                    while self.pos < buf.len() && buf[self.pos] <= 32 {\n                        self.pos += 1;\n                    }\n                }\n                while self.pos < buf.len() && buf[self.pos] > 32 {\n                    parse_token = true;\n                    ans.push(buf[self.pos]);\n                    self.pos += 1;\n                }\n                if self.pos != buf.len() || self.pos == 0 {\n                    return ans;\n                }\n            }\n            self.stdin.consume(self.pos);\n            self.pos = 0;\n        }\n    }\n}\n\nmacro_rules! impl_token_stream {\n    ($($t:ident),+) => {$(\n        impl<R: BufRead> TokenStream<$t> for FastInput<R> {\n           fn token(&mut self) -> $t {\n                let mut ans = 0;\n                let mut parse_token = false;\n                loop {\n                    if let Ok(buf) = self.stdin.fill_buf() {\n                        if !parse_token {\n                            while self.pos < buf.len() && buf[self.pos] <= 32 {\n                                self.pos += 1;\n                            }\n                        }\n                        while self.pos < buf.len() && buf[self.pos] > 32 {\n                            parse_token = true;\n                            ans = ans * 10 + (buf[self.pos] - b'0') as $t;\n                            self.pos += 1;\n                        }\n                        if self.pos != buf.len() || self.pos == 0 {\n                            return ans;\n                        }\n                    }\n                    self.stdin.consume(self.pos);\n                    self.pos = 0;\n                }\n           }\n        }\n    )+}\n}\n\nimpl_token_stream!(usize);\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "7436893ea0f98234e2478703c923ad36", "src_uid": "e52ec2fa5bcf5d2027d57b0694b4e15a", "difficulty": 1900}
  16. {"lang": "Rust", "source_code": "#![allow(unused_variables)]\n#![allow(unused_must_use)]\n#![allow(unused_imports)]\nuse std::collections::BinaryHeap;\nuse std::collections::BTreeSet;\nuse std::collections::HashMap;\nuse std::collections::HashSet;\nuse std::io::{self, prelude::*};\nuse std::cmp::{min,max};\nuse std::cmp::Reverse;\n\n\n\n\nfn collapse(x: &usize, uf: &mut Vec<usize>) {\n    let mut xs = vec![];\n    let mut y = *x;\n\n    while uf[y] != y {\n       xs.push(y);\n       y = uf[y];\n    }\n\n    for i in 0..xs.len() {\n        uf[xs[i]] = y;\n    }\n}\n\nfn solve<R: BufRead, W: Write>(mut input: FastInput<R>, mut w: W) {\n    let n: usize = input.token();\n    let m: usize = input.token();\n\n    let mut vs = vec![];\n    let mut uf = vec![];\n    let mut components = n;\n\n    for i in 0..n {\n        let ai: usize = input.token();\n        vs.push((ai, i));\n        uf.push(i);\n    }\n\n    vs.sort();\n\n    let mut es = vec![];\n\n    for i in 0..m {\n        let a: usize = input.token();\n        let b: usize = input.token();\n        let w: usize = input.token();\n    }\n\n    let mut heap = BinaryHeap::new();\n\n    for i in 0..es.len() {\n        heap.push(Reverse((es[i].0, es[i].1, es[i].2)));\n    }\n\n    for i in 1..n {\n        heap.push(Reverse((vs[0].0 + vs[i].0, vs[i].1, vs[0].1)));\n    }\n\n    let mut total_cost = 0;\n\n    while let Some(Reverse((v, x, y))) = heap.pop() {\n        // println!(\"Processing {}-{} ({})\", x, y, v);\n        collapse(&x, &mut uf);\n        collapse(&y, &mut uf);\n        if uf[y] == uf[x] {\n            // println!(\"skip\");\n            continue;\n        }\n        /*\n        for i in 0..n {\n            print!(\"({} -> {})\", i, uf[i]);\n        }\n        println!(\"\");\n        */\n        let z = uf[y];\n        uf[z] = uf[x];\n        uf[y] = uf[x];\n        components -= 1;\n        total_cost += v;\n        \n        if components == 1 {\n            break;\n        }\n    }\n\n    write!(w, \"{}\\n\", total_cost);\n}\n\nfn main() {\n    let stdin = io::stdin();\n    let stdout = io::stdout();\n    let input = FastInput::from(stdin.lock());\n    let writer = io::BufWriter::new(stdout.lock());\n    solve(input, writer);\n}\n\ntrait TokenStream<T> {\n    fn token(&mut self) -> T;\n}\n\nstruct FastInput<R> {\n    stdin: R,\n    pos: usize,\n}\n\nimpl<R: BufRead> From<R> for FastInput<R> {\n    fn from(r: R) -> Self {\n        FastInput { stdin: r, pos: 0 }\n    }\n}\n\nimpl<R: BufRead> TokenStream<u8> for FastInput<R> {\n    fn token(&mut self) -> u8 {\n        loop {\n            if let Ok(buf) = self.stdin.fill_buf() {\n                while self.pos < buf.len() {\n                    self.pos += 1;\n                    if buf[self.pos - 1] > 32 {\n                        return buf[self.pos - 1];\n                    }\n                }\n                if self.pos == 0 {\n                    return 0;\n                }\n            } else {\n                return 0;\n            }\n            self.stdin.consume(self.pos);\n            self.pos = 0;\n        }\n    }\n}\n\nimpl<R: BufRead> TokenStream<Vec<u8>> for FastInput<R> {\n    fn token(&mut self) -> Vec<u8> {\n        let mut ans = Vec::new();\n        let mut parse_token = false;\n        loop {\n            if let Ok(buf) = self.stdin.fill_buf() {\n                if !parse_token {\n                    while self.pos < buf.len() && buf[self.pos] <= 32 {\n                        self.pos += 1;\n                    }\n                }\n                while self.pos < buf.len() && buf[self.pos] > 32 {\n                    parse_token = true;\n                    ans.push(buf[self.pos]);\n                    self.pos += 1;\n                }\n                if self.pos != buf.len() || self.pos == 0 {\n                    return ans;\n                }\n            }\n            self.stdin.consume(self.pos);\n            self.pos = 0;\n        }\n    }\n}\n\nmacro_rules! impl_token_stream {\n    ($($t:ident),+) => {$(\n        impl<R: BufRead> TokenStream<$t> for FastInput<R> {\n           fn token(&mut self) -> $t {\n                let mut ans = 0;\n                let mut parse_token = false;\n                loop {\n                    if let Ok(buf) = self.stdin.fill_buf() {\n                        if !parse_token {\n                            while self.pos < buf.len() && buf[self.pos] <= 32 {\n                                self.pos += 1;\n                            }\n                        }\n                        while self.pos < buf.len() && buf[self.pos] > 32 {\n                            parse_token = true;\n                            ans = ans * 10 + (buf[self.pos] - b'0') as $t;\n                            self.pos += 1;\n                        }\n                        if self.pos != buf.len() || self.pos == 0 {\n                            return ans;\n                        }\n                    }\n                    self.stdin.consume(self.pos);\n                    self.pos = 0;\n                }\n           }\n        }\n    )+}\n}\n\nimpl_token_stream!(usize);\n", "lang_cluster": "Rust", "compilation_error": true, "code_uid": "774ae6f349debd587b6ab33372181ab6", "src_uid": "e52ec2fa5bcf5d2027d57b0694b4e15a", "difficulty": 1900}
  17. {"lang": "Rust", "source_code": "#![allow(unused_variables)]\n#![allow(unused_must_use)]\n#![allow(unused_imports)]\nuse std::collections::BinaryHeap;\nuse std::collections::BTreeSet;\nuse std::collections::HashMap;\nuse std::collections::HashSet;\nuse std::io::{self, prelude::*};\nuse std::cmp::{min,max};\nuse std::cmp::Reverse;\n\n\n\n#[derive(Debug, Ord, Eq, PartialEq, PartialOrd)]\nenum Edge {\n    Normal,\n    Offer,\n} \n\nfn collapse(x: &usize, uf: &mut Vec<usize>) {\n    let mut xs = vec![];\n    let mut y = *x;\n\n    while uf[y] != y {\n       xs.push(y);\n       y = uf[y];\n    }\n\n    for i in 0..xs.len() {\n        uf[xs[i]] = y;\n    }\n}\n\nfn solve<R: BufRead, W: Write>(mut input: FastInput<R>, mut w: W) {\n    let n: usize = input.token();\n    let m: usize = input.token();\n\n    let mut vs = vec![];\n    let mut uf = vec![];\n    let mut indexes = HashMap::new();\n    let mut components = n;\n\n    for i in 0..n {\n        let ai: usize = input.token();\n        vs.push((ai, i));\n        uf.push(i);\n    }\n\n    vs.sort();\n\n    for i in 0..n {\n        indexes.insert(vs[i].1, i);\n    }\n\n    let mut es = vec![];\n\n    for i in 0..m {\n        let a: usize = input.token();\n        let b: usize = input.token();\n        let w: usize = input.token();\n        if vs[indexes[&(a - 1)]].0 + vs[indexes[&(b - 1)]].0 > w {\n            es.push((w, a - 1, b - 1));\n        }\n    }\n\n    let mut heap = BinaryHeap::new();\n\n    for i in 0..es.len() {\n        heap.push(Reverse((es[i].0, es[i].1, es[i].2, Edge::Offer)));\n    }\n\n    for i in 1..n {\n        heap.push(Reverse((vs[0].0 + vs[i].0 , vs[i].1, vs[0].1, Edge::Normal)));\n    }\n\n    let mut total_cost = 0;\n\n    while let Some(Reverse((v, x, y, t))) = heap.pop() {\n        // println!(\"Processing {}-{} ({}, {:?})\", x, y, v, t);\n        collapse(&x, &mut uf);\n        collapse(&y, &mut uf);\n        if uf[y] == uf[x] {\n            continue;\n        }\n        uf[y] = min(uf[x], uf[y]);\n        uf[x] = min(uf[x], uf[y]);\n        components -= 1;\n        total_cost += v;\n        \n        if components == 1 {\n            break;\n        }\n\n        if t == Edge::Normal {\n            let new_y = vs[indexes[&y] + 1].1;\n            let new_v = vs[indexes[&new_y]].0 + vs[indexes[&x]].0;\n            // println!(\"New y is {}, new value is {}\", new_y, new_v);\n            heap.push(Reverse((new_v, x, new_y, Edge::Normal)));\n        }\n    }\n\n    write!(w, \"{}\\n\", total_cost);\n}\n\nfn main() {\n    let stdin = io::stdin();\n    let stdout = io::stdout();\n    let input = FastInput::from(stdin.lock());\n    let writer = io::BufWriter::new(stdout.lock());\n    solve(input, writer);\n}\n\ntrait TokenStream<T> {\n    fn token(&mut self) -> T;\n}\n\nstruct FastInput<R> {\n    stdin: R,\n    pos: usize,\n}\n\nimpl<R: BufRead> From<R> for FastInput<R> {\n    fn from(r: R) -> Self {\n        FastInput { stdin: r, pos: 0 }\n    }\n}\n\nimpl<R: BufRead> TokenStream<u8> for FastInput<R> {\n    fn token(&mut self) -> u8 {\n        loop {\n            if let Ok(buf) = self.stdin.fill_buf() {\n                while self.pos < buf.len() {\n                    self.pos += 1;\n                    if buf[self.pos - 1] > 32 {\n                        return buf[self.pos - 1];\n                    }\n                }\n                if self.pos == 0 {\n                    return 0;\n                }\n            } else {\n                return 0;\n            }\n            self.stdin.consume(self.pos);\n            self.pos = 0;\n        }\n    }\n}\n\nimpl<R: BufRead> TokenStream<Vec<u8>> for FastInput<R> {\n    fn token(&mut self) -> Vec<u8> {\n        let mut ans = Vec::new();\n        let mut parse_token = false;\n        loop {\n            if let Ok(buf) = self.stdin.fill_buf() {\n                if !parse_token {\n                    while self.pos < buf.len() && buf[self.pos] <= 32 {\n                        self.pos += 1;\n                    }\n                }\n                while self.pos < buf.len() && buf[self.pos] > 32 {\n                    parse_token = true;\n                    ans.push(buf[self.pos]);\n                    self.pos += 1;\n                }\n                if self.pos != buf.len() || self.pos == 0 {\n                    return ans;\n                }\n            }\n            self.stdin.consume(self.pos);\n            self.pos = 0;\n        }\n    }\n}\n\nmacro_rules! impl_token_stream {\n    ($($t:ident),+) => {$(\n        impl<R: BufRead> TokenStream<$t> for FastInput<R> {\n           fn token(&mut self) -> $t {\n                let mut ans = 0;\n                let mut parse_token = false;\n                loop {\n                    if let Ok(buf) = self.stdin.fill_buf() {\n                        if !parse_token {\n                            while self.pos < buf.len() && buf[self.pos] <= 32 {\n                                self.pos += 1;\n                            }\n                        }\n                        while self.pos < buf.len() && buf[self.pos] > 32 {\n                            parse_token = true;\n                            ans = ans * 10 + (buf[self.pos] - b'0') as $t;\n                            self.pos += 1;\n                        }\n                        if self.pos != buf.len() || self.pos == 0 {\n                            return ans;\n                        }\n                    }\n                    self.stdin.consume(self.pos);\n                    self.pos = 0;\n                }\n           }\n        }\n    )+}\n}\n\nimpl_token_stream!(usize);\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "6001af463b447143b982d72e3cf895e5", "src_uid": "e52ec2fa5bcf5d2027d57b0694b4e15a", "difficulty": 1900}
  18. {"lang": "Rust", "source_code": "#![allow(unused_variables)]\n#![allow(unused_must_use)]\n#![allow(unused_imports)]\nuse std::collections::BinaryHeap;\nuse std::collections::BTreeSet;\nuse std::collections::HashMap;\nuse std::collections::HashSet;\nuse std::io::{self, prelude::*};\nuse std::cmp::{min,max};\nuse std::cmp::Reverse;\n\n\n\n\nfn collapse(x: &usize, uf: &mut Vec<usize>) {\n    let mut xs = vec![];\n    let mut y = *x;\n\n    while uf[y] != y {\n       xs.push(y);\n       y = uf[y];\n    }\n\n    for i in 0..xs.len() {\n        uf[xs[i]] = y;\n    }\n}\n\nfn solve<R: BufRead, W: Write>(mut input: FastInput<R>, mut w: W) {\n    let n: usize = input.token();\n    let m: usize = input.token();\n\n    let mut vs = vec![];\n    let mut uf = vec![];\n    let mut components = n;\n\n    for i in 0..n {\n        let ai: usize = input.token();\n        vs.push((ai, i));\n        uf.push(i);\n    }\n\n    vs.sort();\n\n\n    let mut es = vec![];\n\n    for i in 0..m {\n        let a: usize = input.token();\n        let b: usize = input.token();\n        let w: usize = input.token();\n        es.push((w, a - 1, b - 1));\n    }\n\n    let mut heap = BinaryHeap::new();\n\n    for i in 0..es.len() {\n        heap.push(Reverse((es[i].0, es[i].1, es[i].2)));\n    }\n\n    for i in 1..n {\n        heap.push(Reverse((vs[0].0 + vs[i].0, vs[i].1, vs[0].1)));\n    }\n\n    let mut total_cost = 0;\n\n    while let Some(Reverse((v, x, y))) = heap.pop() {\n        // println!(\"Processing {}-{} ({})\", x, y, v);\n        collapse(&x, &mut uf);\n        collapse(&y, &mut uf);\n        if uf[y] == uf[x] {\n            // println!(\"skip\");\n            continue;\n        }\n        /*\n        for i in 0..n {\n            print!(\"({} -> {})\", i, uf[i]);\n        }\n        println!(\"\");\n        */\n        let z = uf[y];\n        uf[z] = uf[x];\n        uf[y] = uf[x];\n        components -= 1;\n        total_cost += v;\n        \n        if components == 1 {\n            break;\n        }\n    }\n\n    write!(w, \"{}\\n\", total_cost);\n}\n\nfn main() {\n    let stdin = io::stdin();\n    let stdout = io::stdout();\n    let input = FastInput::from(stdin.lock());\n    let writer = io::BufWriter::new(stdout.lock());\n    solve(input, writer);\n}\n\ntrait TokenStream<T> {\n    fn token(&mut self) -> T;\n}\n\nstruct FastInput<R> {\n    stdin: R,\n    pos: usize,\n}\n\nimpl<R: BufRead> From<R> for FastInput<R> {\n    fn from(r: R) -> Self {\n        FastInput { stdin: r, pos: 0 }\n    }\n}\n\nimpl<R: BufRead> TokenStream<u8> for FastInput<R> {\n    fn token(&mut self) -> u8 {\n        loop {\n            if let Ok(buf) = self.stdin.fill_buf() {\n                while self.pos < buf.len() {\n                    self.pos += 1;\n                    if buf[self.pos - 1] > 32 {\n                        return buf[self.pos - 1];\n                    }\n                }\n                if self.pos == 0 {\n                    return 0;\n                }\n            } else {\n                return 0;\n            }\n            self.stdin.consume(self.pos);\n            self.pos = 0;\n        }\n    }\n}\n\nimpl<R: BufRead> TokenStream<Vec<u8>> for FastInput<R> {\n    fn token(&mut self) -> Vec<u8> {\n        let mut ans = Vec::new();\n        let mut parse_token = false;\n        loop {\n            if let Ok(buf) = self.stdin.fill_buf() {\n                if !parse_token {\n                    while self.pos < buf.len() && buf[self.pos] <= 32 {\n                        self.pos += 1;\n                    }\n                }\n                while self.pos < buf.len() && buf[self.pos] > 32 {\n                    parse_token = true;\n                    ans.push(buf[self.pos]);\n                    self.pos += 1;\n                }\n                if self.pos != buf.len() || self.pos == 0 {\n                    return ans;\n                }\n            }\n            self.stdin.consume(self.pos);\n            self.pos = 0;\n        }\n    }\n}\n\nmacro_rules! impl_token_stream {\n    ($($t:ident),+) => {$(\n        impl<R: BufRead> TokenStream<$t> for FastInput<R> {\n           fn token(&mut self) -> $t {\n                let mut ans = 0;\n                let mut parse_token = false;\n                loop {\n                    if let Ok(buf) = self.stdin.fill_buf() {\n                        if !parse_token {\n                            while self.pos < buf.len() && buf[self.pos] <= 32 {\n                                self.pos += 1;\n                            }\n                        }\n                        while self.pos < buf.len() && buf[self.pos] > 32 {\n                            parse_token = true;\n                            ans = ans * 10 + (buf[self.pos] - b'0') as $t;\n                            self.pos += 1;\n                        }\n                        if self.pos != buf.len() || self.pos == 0 {\n                            return ans;\n                        }\n                    }\n                    self.stdin.consume(self.pos);\n                    self.pos = 0;\n                }\n           }\n        }\n    )+}\n}\n\nimpl_token_stream!(usize);\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "a357270b40a9dc77497979ce6049a1f0", "src_uid": "e52ec2fa5bcf5d2027d57b0694b4e15a", "difficulty": 1900}
  19. {"lang": "Rust", "source_code": "#![allow(unused_variables)]\n#![allow(unused_must_use)]\n#![allow(unused_imports)]\nuse std::collections::BinaryHeap;\nuse std::collections::BTreeSet;\nuse std::collections::HashMap;\nuse std::collections::HashSet;\nuse std::io::{self, prelude::*};\nuse std::cmp::{min,max};\nuse std::cmp::Reverse;\n\n\n\n\nfn collapse(x: &usize, uf: &mut Vec<usize>) {\n    let mut xs = vec![];\n    let mut y = *x;\n\n    while uf[y] != y {\n       xs.push(y);\n       y = uf[y];\n    }\n\n    for i in 0..xs.len() {\n        uf[xs[i]] = y;\n    }\n}\n\nfn solve<R: BufRead, W: Write>(mut input: FastInput<R>, mut w: W) {\n    let n: usize = input.token();\n    let m: usize = input.token();\n\n    let mut vs = vec![];\n    let mut uf = vec![];\n    let mut components = n;\n\n    for i in 0..n {\n        let ai: usize = input.token();\n        vs.push((ai, i));\n        uf.push(i);\n    }\n\n    vs.sort();\n\n\n    let mut es = vec![];\n\n    for i in 0..m {\n        let a: usize = input.token();\n        let b: usize = input.token();\n        let w: usize = input.token();\n        es.push((w, a - 1, b - 1));\n    }\n\n    let mut heap = BinaryHeap::new();\n\n    for i in 0..es.len() {\n        heap.push(Reverse((es[i].0, es[i].1, es[i].2)));\n    }\n\n    for i in 1..n {\n        heap.push(Reverse((vs[0].0 + vs[i].0, vs[i].1, vs[0].1)));\n    }\n\n    let mut total_cost: i64 = 0;\n\n    while let Some(Reverse((v, x, y))) = heap.pop() {\n        // println!(\"Processing {}-{} ({})\", x, y, v);\n        collapse(&x, &mut uf);\n        collapse(&y, &mut uf);\n        if uf[y] == uf[x] {\n            // println!(\"skip\");\n            continue;\n        }\n        /*\n        for i in 0..n {\n            print!(\"({} -> {})\", i, uf[i]);\n        }\n        println!(\"\");\n        */\n        let z = uf[y];\n        uf[z] = uf[x];\n        uf[z] = uf[x];\n        components -= 1;\n        total_cost += v as i64;\n        \n        if components == 1 {\n            break;\n        }\n    }\n\n    write!(w, \"{}\\n\", total_cost);\n}\n\nfn main() {\n    let stdin = io::stdin();\n    let stdout = io::stdout();\n    let input = FastInput::from(stdin.lock());\n    let writer = io::BufWriter::new(stdout.lock());\n    solve(input, writer);\n}\n\ntrait TokenStream<T> {\n    fn token(&mut self) -> T;\n}\n\nstruct FastInput<R> {\n    stdin: R,\n    pos: usize,\n}\n\nimpl<R: BufRead> From<R> for FastInput<R> {\n    fn from(r: R) -> Self {\n        FastInput { stdin: r, pos: 0 }\n    }\n}\n\nimpl<R: BufRead> TokenStream<u8> for FastInput<R> {\n    fn token(&mut self) -> u8 {\n        loop {\n            if let Ok(buf) = self.stdin.fill_buf() {\n                while self.pos < buf.len() {\n                    self.pos += 1;\n                    if buf[self.pos - 1] > 32 {\n                        return buf[self.pos - 1];\n                    }\n                }\n                if self.pos == 0 {\n                    return 0;\n                }\n            } else {\n                return 0;\n            }\n            self.stdin.consume(self.pos);\n            self.pos = 0;\n        }\n    }\n}\n\nimpl<R: BufRead> TokenStream<Vec<u8>> for FastInput<R> {\n    fn token(&mut self) -> Vec<u8> {\n        let mut ans = Vec::new();\n        let mut parse_token = false;\n        loop {\n            if let Ok(buf) = self.stdin.fill_buf() {\n                if !parse_token {\n                    while self.pos < buf.len() && buf[self.pos] <= 32 {\n                        self.pos += 1;\n                    }\n                }\n                while self.pos < buf.len() && buf[self.pos] > 32 {\n                    parse_token = true;\n                    ans.push(buf[self.pos]);\n                    self.pos += 1;\n                }\n                if self.pos != buf.len() || self.pos == 0 {\n                    return ans;\n                }\n            }\n            self.stdin.consume(self.pos);\n            self.pos = 0;\n        }\n    }\n}\n\nmacro_rules! impl_token_stream {\n    ($($t:ident),+) => {$(\n        impl<R: BufRead> TokenStream<$t> for FastInput<R> {\n           fn token(&mut self) -> $t {\n                let mut ans = 0;\n                let mut parse_token = false;\n                loop {\n                    if let Ok(buf) = self.stdin.fill_buf() {\n                        if !parse_token {\n                            while self.pos < buf.len() && buf[self.pos] <= 32 {\n                                self.pos += 1;\n                            }\n                        }\n                        while self.pos < buf.len() && buf[self.pos] > 32 {\n                            parse_token = true;\n                            ans = ans * 10 + (buf[self.pos] - b'0') as $t;\n                            self.pos += 1;\n                        }\n                        if self.pos != buf.len() || self.pos == 0 {\n                            return ans;\n                        }\n                    }\n                    self.stdin.consume(self.pos);\n                    self.pos = 0;\n                }\n           }\n        }\n    )+}\n}\n\nimpl_token_stream!(usize);\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "bc9ed7e6f30546f73d1d231d0980f44b", "src_uid": "e52ec2fa5bcf5d2027d57b0694b4e15a", "difficulty": 1900}
  20. {"lang": "Rust", "source_code": "#![allow(unused_variables)]\n#![allow(unused_must_use)]\n#![allow(unused_imports)]\nuse std::collections::BinaryHeap;\nuse std::collections::BTreeSet;\nuse std::collections::HashMap;\nuse std::collections::HashSet;\nuse std::io::{self, prelude::*};\nuse std::cmp::{min,max};\nuse std::cmp::Reverse;\n\n\n\n\nfn collapse(x: &usize, uf: &mut Vec<usize>) {\n    let mut xs = vec![];\n    let mut y = *x;\n\n    while uf[y] != y {\n       xs.push(y);\n       y = uf[y];\n    }\n\n    for i in 0..xs.len() {\n        uf[xs[i]] = y;\n    }\n}\n\nfn solve<R: BufRead, W: Write>(mut input: FastInput<R>, mut w: W) {\n    let n: usize = input.token();\n    let m: usize = input.token();\n\n    let mut vs = vec![];\n    let mut uf = vec![];\n    let mut indexes = HashMap::new();\n    let mut components = n;\n\n    for i in 0..n {\n        let ai: usize = input.token();\n        vs.push((ai, i));\n        uf.push(i);\n    }\n\n    vs.sort();\n\n    for i in 0..n {\n        indexes.insert(vs[i].1, i);\n    }\n\n    let mut es = vec![];\n\n    for i in 0..m {\n        let a: usize = input.token();\n        let b: usize = input.token();\n        let w: usize = input.token();\n        if vs[indexes[&(a - 1)]].0 + vs[indexes[&(b - 1)]].0 > w {\n            es.push((w, a - 1, b - 1));\n        }\n    }\n\n    let mut heap = BinaryHeap::new();\n\n    for i in 0..es.len() {\n        heap.push(Reverse((es[i].0, es[i].1, es[i].2)));\n    }\n\n    for i in 1..n {\n        heap.push(Reverse((vs[0].0 + vs[i].0, vs[i].1, vs[0].1)));\n    }\n\n    let mut total_cost = 0;\n\n    while let Some(Reverse((v, x, y))) = heap.pop() {\n        // println!(\"Processing {}-{} ({})\", x, y, v);\n        collapse(&x, &mut uf);\n        collapse(&y, &mut uf);\n        if uf[y] == uf[x] {\n            // println!(\"skip\");\n            continue;\n        }\n        /*\n        for i in 0..n {\n            print!(\"({} -> {})\", i, uf[i]);\n        }\n        println!(\"\");\n        */\n        let z = uf[y];\n        uf[z] = uf[x];\n        components -= 1;\n        total_cost += v;\n        \n        if components == 1 {\n            break;\n        }\n    }\n\n    write!(w, \"{}\\n\", total_cost);\n}\n\nfn main() {\n    let stdin = io::stdin();\n    let stdout = io::stdout();\n    let input = FastInput::from(stdin.lock());\n    let writer = io::BufWriter::new(stdout.lock());\n    solve(input, writer);\n}\n\ntrait TokenStream<T> {\n    fn token(&mut self) -> T;\n}\n\nstruct FastInput<R> {\n    stdin: R,\n    pos: usize,\n}\n\nimpl<R: BufRead> From<R> for FastInput<R> {\n    fn from(r: R) -> Self {\n        FastInput { stdin: r, pos: 0 }\n    }\n}\n\nimpl<R: BufRead> TokenStream<u8> for FastInput<R> {\n    fn token(&mut self) -> u8 {\n        loop {\n            if let Ok(buf) = self.stdin.fill_buf() {\n                while self.pos < buf.len() {\n                    self.pos += 1;\n                    if buf[self.pos - 1] > 32 {\n                        return buf[self.pos - 1];\n                    }\n                }\n                if self.pos == 0 {\n                    return 0;\n                }\n            } else {\n                return 0;\n            }\n            self.stdin.consume(self.pos);\n            self.pos = 0;\n        }\n    }\n}\n\nimpl<R: BufRead> TokenStream<Vec<u8>> for FastInput<R> {\n    fn token(&mut self) -> Vec<u8> {\n        let mut ans = Vec::new();\n        let mut parse_token = false;\n        loop {\n            if let Ok(buf) = self.stdin.fill_buf() {\n                if !parse_token {\n                    while self.pos < buf.len() && buf[self.pos] <= 32 {\n                        self.pos += 1;\n                    }\n                }\n                while self.pos < buf.len() && buf[self.pos] > 32 {\n                    parse_token = true;\n                    ans.push(buf[self.pos]);\n                    self.pos += 1;\n                }\n                if self.pos != buf.len() || self.pos == 0 {\n                    return ans;\n                }\n            }\n            self.stdin.consume(self.pos);\n            self.pos = 0;\n        }\n    }\n}\n\nmacro_rules! impl_token_stream {\n    ($($t:ident),+) => {$(\n        impl<R: BufRead> TokenStream<$t> for FastInput<R> {\n           fn token(&mut self) -> $t {\n                let mut ans = 0;\n                let mut parse_token = false;\n                loop {\n                    if let Ok(buf) = self.stdin.fill_buf() {\n                        if !parse_token {\n                            while self.pos < buf.len() && buf[self.pos] <= 32 {\n                                self.pos += 1;\n                            }\n                        }\n                        while self.pos < buf.len() && buf[self.pos] > 32 {\n                            parse_token = true;\n                            ans = ans * 10 + (buf[self.pos] - b'0') as $t;\n                            self.pos += 1;\n                        }\n                        if self.pos != buf.len() || self.pos == 0 {\n                            return ans;\n                        }\n                    }\n                    self.stdin.consume(self.pos);\n                    self.pos = 0;\n                }\n           }\n        }\n    )+}\n}\n\nimpl_token_stream!(usize);\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "30031a2d79e2be68fcee9570a0bca6dd", "src_uid": "e52ec2fa5bcf5d2027d57b0694b4e15a", "difficulty": 1900}
  21. {"lang": "Rust", "source_code": "#[allow(unused_imports)]\nuse std::cmp::{min,max};\n//const INF: i32 = 0x3f3f3f3f;\n\nstruct Scanner {\n    buffer: std::collections::VecDeque<String>\n}\n\nimpl Scanner {\n    fn new() -> Scanner {\n        Scanner {\n            buffer: std::collections::VecDeque::new()\n        }\n    }\n\n    fn next<T: std::str::FromStr>(&mut self) -> T {\n        while self.buffer.is_empty() {\n            let mut input = String::new();\n            std::io::stdin().read_line(&mut input).ok();\n            self.buffer = input.split_whitespace()\n                .map(ToString::to_string).collect();\n        }\n        let front = self.buffer.pop_front().unwrap();\n        front.parse::<T>().ok().unwrap()\n    }\n}\n\n/// Data structure for Knuth-Morris-Pratt string matching against a pattern.\npub struct Matcher<'a> {\n    /// The string pattern to search for.\n    pub pattern: &'a [i32],\n    /// KMP match failure automaton. fail[i] is the length of the longest\n    /// proper prefix-suffix of pattern[0...i].\n    pub fail: Vec<usize>,\n}\n\nimpl<'a> Matcher<'a> {\n    /// Precomputes the automaton that allows linear-time string matching.\n    ///\n    /// # Panics\n    ///\n    /// Panics if pattern is empty.\n    pub fn new(pattern: &'a [i32]) -> Self {\n        let mut fail = Vec::with_capacity(pattern.len());\n        fail.push(0);\n        let mut len = 0;\n        for &ch in &pattern[1..] {\n            while len > 0 && pattern[len] != ch {\n                len = fail[len - 1];\n            }\n            if pattern[len] == ch {\n                len += 1;\n            }\n            fail.push(len);\n        }\n        Self { pattern, fail }\n    }\n\n    /// KMP algorithm, sets matches[i] = length of longest prefix of pattern\n    /// matching a suffix of text[0...i].\n    pub fn kmp_match(&self, text: &[i32]) -> bool {\n        let mut len = 0;\n        for &ch in text {\n            if len == self.pattern.len() {\n                len = self.fail[len - 1];\n            }\n            while len > 0 && self.pattern[len] != ch {\n                len = self.fail[len - 1];\n            }\n            if self.pattern[len] == ch {\n                len += 1;\n            }\n            if len == self.pattern.len() {\n                return true;\n            }\n        }\n        return false;\n    }\n}\n\nfn main1() {\n    let mut scan = Scanner::new();\n    let n = scan.next::<i32>();\n    let m = scan.next::<usize>();\n    let mut adj = vec![vec![]; n as usize];\n    for _ in 0..m {\n        let a = scan.next::<i32>() - 1;\n        let b = scan.next::<i32>() - 1;\n        adj[a as usize].push((b - a + n) % n);\n        adj[b as usize].push((a - b + n) % n);\n    }\n    \n    let mut pat = vec![];\n    for mut jumps in adj {\n        pat.push(0);\n        jumps.sort_unstable();\n        pat.extend(jumps);\n    }\n    let mut pat2 = pat.clone();\n    pat2.extend(pat.clone());\n    pat2.pop();\n    \n    let symmetric = Matcher::new(&pat).kmp_match(&pat2[1..]);\n    if symmetric {\n        print!(\"Yes\");\n    } else {\n        print!(\"No\");\n    }\n}\n\nfn main() {\n    std::thread::Builder::new().stack_size(50 << 20)\n        .spawn(main1).unwrap().join().unwrap();\n}", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "597f36f07770c326e1493fb84eac1c1a", "src_uid": "dd7a7a4e5feb50ab6abb93d90c559c2b", "difficulty": 1900}
  22. {"lang": "Rust", "source_code": "#[allow(unused_imports)]\nuse std::cmp::*;\n#[allow(unused_imports)]\nuse std::collections::*;\nuse std::io::{Read, BufWriter, Write};\n#[allow(dead_code)]\nfn getline() -> String {\n    let mut ret = String::new();\n    std::io::stdin().read_line(&mut ret).ok().unwrap();\n    ret\n}\nfn get_word() -> String {\n    let mut stdin = std::io::stdin();\n    let mut u8b: [u8; 1] = [0];\n    loop {\n        let mut buf: Vec<u8> = Vec::with_capacity(16);\n        loop {\n            let res = stdin.read(&mut u8b);\n            if res.unwrap_or(0) == 0 || u8b[0] <= b' ' {\n                break;\n            } else {\n                buf.push(u8b[0]);\n            }\n        }\n        if buf.len() >= 1 {\n            let ret = String::from_utf8(buf).unwrap();\n            return ret;\n        }\n    }\n}\n\n#[allow(dead_code)]\nfn get<T: std::str::FromStr>() -> T { get_word().parse().ok().unwrap() }\n\nconst INF: i64 = 1 << 53;\n\nfn solve() {\n    let n = get();\n    let mut a: Vec<i64> = (0 .. n).map(|_| get()).collect();\n    a.insert(0, -INF);\n    a.push(-INF);\n    let mut dp = vec![vec![vec![INF; n + 1]; n + 1]; 2];\n    dp[0][0][0] = 0;\n    for i in 1 .. n + 1 {\n        let cost =\n            max(0, a[i - 1] - a[i] + 1) + max(0, a[i + 1] - a[i] + 1);\n        let cost2 = if i >= 2 {\n            -max(0, a[i - 1] - a[i - 2] + 1) + max(0, a[i - 1] - min(a[i], a[i - 2]) + 1) + max(0, a[i + 1] - a[i] + 1)\n        } else {\n            INF\n        };\n        for j in 0 .. n + 1 {\n            dp[0][i][j] = min(dp[0][i][j], min(dp[0][i - 1][j], dp[1][i - 1][j]));\n            if j > 0 {\n                dp[1][i][j] = min(dp[1][i][j], dp[0][i - 1][j - 1] + cost);\n                if i >= 2 {\n                    dp[1][i][j] = min(dp[1][i][j], dp[1][i - 2][j - 1] + cost2);\n                }\n            }\n        }\n    }\n    let mut ans = vec![INF; n + 1];\n    for i in 0 .. n + 1 {\n        ans[i] = min(dp[0][n][i], dp[1][n][i]);\n    }\n    let stdout = std::io::stdout();\n    let mut stdout = BufWriter::new(stdout.lock());\n    for i in 1 .. (n + 1) / 2 + 1 {\n        write!(stdout, \"{}{}\", ans[i], if i == (n + 1) / 2 { \"\\n\" } else { \" \" }).unwrap();\n    }\n}\n\nfn main() {\n    // In order to avoid potential stack overflow, spawn a new thread.\n    let stack_size = 104_857_600; // 100 MB\n    let thd = std::thread::Builder::new().stack_size(stack_size);\n    thd.spawn(|| solve()).unwrap().join().unwrap();\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "f9038f5d60c3531ce8031537d3614ac2", "src_uid": "9534b468bfb6126fc16b896532ced8c5", "difficulty": 1900}
  23. {"lang": "Rust", "source_code": "pub fn read_num() -> Vec<i32> {\n    let mut line = String::new();\n    std::io::stdin().read_line(&mut line).unwrap();\n\n    line.split_whitespace()\n        .map(|s| s.parse().unwrap())\n        .collect()\n }\n\nfn main() {\n\tlet mut line = String::new();\n\n    let nk = read_num();\n\tlet mut arr = read_num();\n\n\tarr.sort();\n\tarr.truncate(nk[1] as usize);\n\t\n\tlet ans: i32 = arr.iter().sum();\n\n\tprintln!(\"{}\", ans);\n}", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "207738b355eb44b08f0c2d06dab83aec", "src_uid": "5097e92916e49cdc6fb4953b864186db", "difficulty": 1200}
  24. {"lang": "Rust", "source_code": "#![allow(unused_imports)]\n#![allow(non_snake_case)]\n#![allow(non_shorthand_field_patterns)]\n\nuse std::cmp::{max, min, Ordering};\nuse std::collections::*;\nuse std::fmt::{Debug, Formatter};\nuse std::io::*;\nuse std::ops::*;\nuse std::rc::Rc;\nuse std::*;\n\n// -----------------------------------------------\n// Framework\n// -----------------------------------------------\n\n#[allow(unused_macros)]\nmacro_rules! read {\n    ([$t:ty] ; $n:expr) =>\n        ((0..$n).map(|_| read!([$t])).collect::<Vec<_>>());\n    ($($t:ty),+ ; $n:expr) =>\n        ((0..$n).map(|_| read!($($t),+)).collect::<Vec<_>>());\n    ([$t:ty]) =>\n        (rl().split_whitespace().map(|w| w.parse().unwrap()).collect::<Vec<$t>>());\n    ($t:ty) =>\n        (rl().parse::<$t>().unwrap());\n    ($($t:ty),*) => {{\n        let buf = rl();\n        let mut w = buf.split_whitespace();\n        ($(w.next().unwrap().parse::<$t>().unwrap()),*)\n    }};\n}\n\n#[allow(unused_macros)]\nmacro_rules! debug {\n    ($($arg:expr),*) => {\n        #[cfg(debug_assertions)]\n        {\n            let entries = [$(&stringify!([$arg]:), &$arg as &Debug),*];\n            stderr().write_fmt(format_args!(\"{:#?}\\n\", entries)).unwrap();\n        }\n    };\n}\n\n#[allow(dead_code)]\nfn rl() -> String {\n    let mut buf = String::new();\n    io::stdin().read_line(&mut buf).unwrap();\n    buf.trim_right().to_owned()\n}\n\ntrait IteratorExt: Iterator + Sized {\n    fn vec(self) -> Vec<Self::Item> {\n        self.collect()\n    }\n}\n\nimpl<T: Iterator> IteratorExt for T {}\n\n// -----------------------------------------------\n// Solution\n// -----------------------------------------------\n\n#[derive(Clone, Copy, Debug)]\nstruct Query {\n    t: usize,\n    x: usize,\n    y: usize,\n}\n\n// \u5ea7\u6a19\u5727\u7e2e\u5f8c\u306e\u6570\u5217\u306e\u5024\u306e\u6700\u5927\u5024\nconst N: usize = 200000;\n\n// \u30d0\u30b1\u30c3\u30c8\u306e\u30b5\u30a4\u30ba (~~ N^(2/3))\nconst SZ: usize = 2100;\n\n// \u30d0\u30b1\u30c3\u30c8\u6570\u306e\u6700\u5927\u5024 (>= N/SZ)\nconst B: usize = 60;\n\nstruct Solver {\n    /// \u66f4\u65b0\u30af\u30a8\u30ea\u30fc\u3092t\u500b\u5b9f\u884c\u3057\u305f\u5f8c\u306e\u533a\u9593 [x, y] \u306e mex \u3092\u7b54\u3048\u308b\u30af\u30a8\u30ea\u30fc\n    mex_query: Vec<Query>,\n    /// t\u756a\u76ee\u306e\u8981\u7d20\u3092x\u304b\u3089y\u306b\u5909\u66f4\u3059\u308b\u30af\u30a8\u30ea\u30fc\n    ch_query: Vec<Query>,\n    /// T\u500b\u306e\u30af\u30a8\u30ea\u30fc\u306e\u5b9f\u884c\u5f8c\u306b\u304a\u3051\u308b\u533a\u9593 [L, R] \u306b\u6ce8\u76ee\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u8868\u3059\u3002\n    T: isize,\n    L: isize,\n    R: isize,\n    /// ct[a] = \u6570\u5024 a \u304c\u73fe\u5728\u306e\u533a\u9593\u306b\u73fe\u308c\u308b\u56de\u6570\n    ct: Vec<usize>,\n    /// sz[k] = \u73fe\u5728\u306e\u533a\u9593\u306b\u304a\u3044\u3066\u3001\u3061\u3087\u3046\u3069 k \u56de\u51fa\u73fe\u3059\u308b\u6570\u5024\u306e\u500b\u6570\n    sz: Vec<i32>,\n    /// \u73fe\u5728\u306e(T\u500b\u306e\u30af\u30a8\u30ea\u30fc\u306e\u5b9f\u884c\u5f8c\u306e)\u6570\u5217\n    a: Vec<usize>,\n    mx: Vec<Vec<HashSet<(usize, usize)>>>,\n}\n\nimpl Solver {\n    pub fn new() -> Solver {\n        Solver {\n            mex_query: Vec::new(),\n            ch_query: Vec::new(),\n            ct: vec![0; N],\n            sz: vec![0; N],\n            a: Vec::new(),\n            L: 0,\n            R: -1,\n            T: -1,\n            mx: vec![vec![HashSet::new(); B]; B],\n        }\n    }\n\n    // R += 1\n    pub fn pr(&mut self) {\n        self.R += 1;\n        let R = self.R as usize;\n\n        // \u533a\u9593\u306b\u8ffd\u52a0\u3055\u308c\u308b\u8981\u7d20\n        let a = self.a[R];\n\n        // \u66f4\u65b0\u524d\u306b\u3001a \u304c\u533a\u9593\u5185\u306b\u51fa\u73fe\u3057\u3066\u3044\u305f\u56de\u6570\n        let k = self.ct[a];\n\n        // a \u306e\u51fa\u73fe\u3059\u308b\u56de\u6570\u306f1\u56de\u5897\u3048\u308b\u3002\n        self.ct[a] += 1;\n\n        // \u300ck \u56de\u51fa\u73fe\u3059\u308b\u6570\u5024\u300d\u306f a \u304c\u6d88\u3048\u30661\u6e1b\u308a\u3001(k + 1) \u56de\u3003\u306fa\u304c\u52a0\u308f\u3063\u30661\u5897\u3048\u308b\u3002\n        self.sz[k] -= 1;\n        self.sz[k + 1] += 1;\n    }\n\n    // \u4e0a\u3068\u540c\u69d8\u3002a\u306e\u51fa\u73fe\u3059\u308b\u56de\u6570\u306f\u6e1b\u308b\u3002\n    pub fn pl(&mut self) {\n        let a = self.a[self.L as usize];\n\n        self.sz[self.ct[a]] -= 1;\n        self.ct[a] -= 1;\n        self.sz[self.ct[a]] += 1;\n\n        self.L += 1;\n    }\n\n    pub fn mr(&mut self) {\n        assert!(self.R >= 0);\n        let R = self.R as usize;\n\n        let a = self.a[R];\n        self.sz[self.ct[a]] -= 1;\n        self.ct[a] -= 1;\n        self.sz[self.ct[a]] += 1;\n\n        self.R -= 1;\n    }\n\n    pub fn ml(&mut self) {\n        assert!(self.L >= 1);\n\n        let a = self.a[self.L as usize];\n        self.sz[self.ct[a]] -= 1;\n        self.ct[a] += 1;\n        self.sz[self.ct[a]] += 1;\n\n        self.L -= 1;\n    }\n\n    fn update(&mut self, i: usize, x: usize, y: usize) {\n        // i \u756a\u76ee\u306e\u8981\u7d20\u3092 x \u304b\u3089 y\u306b\u5909\u66f4\u3059\u308b\n        assert!(self.a[i] == x);\n\n        if self.in_focus(i) {\n            // x \u306e\u51fa\u73fe\u3059\u308b\u56de\u6570\u304c\u6e1b\u308b\n            let a = self.a[i];\n            self.sz[self.ct[a]] -= 1;\n            self.ct[a] -= 1;\n            self.sz[self.ct[a]] += 1;\n        }\n\n        self.a[i] = y;\n\n        if self.in_focus(i) {\n            // y \u306e\u51fa\u73fe\u3059\u308b\u56de\u6570\u304c\u6e1b\u308b\n            let a = self.a[i];\n            self.sz[self.ct[a]] -= 1;\n            self.ct[a] += 1;\n            self.sz[self.ct[a]] += 1;\n        }\n    }\n\n    // T += 1\n    pub fn pt(&mut self) {\n        self.T += 1;\n        let Query { t: i, x, y } = self.ch_query[self.T as usize];\n        self.update(i, x, y);\n    }\n\n    /// T -= 1\n    pub fn mt(&mut self) {\n        let Query { t: i, x, y } = self.ch_query[self.T as usize];\n        self.update(i, y, x);\n        self.T -= 1;\n    }\n\n    /// \u6307\u5b9a\u3055\u308c\u305f\u4f4d\u7f6e\u304c\u73fe\u5728\u306e\u533a\u9593\u306b\u542b\u307e\u308c\u3066\u3044\u308b\u304b\uff1f\n    pub fn in_focus(&self, i: usize) -> bool {\n        self.L <= i as isize && i as isize <= self.R\n    }\n\n    /// \u73fe\u5728\u306e\u533a\u9593\u306e mex \u3092\u8a08\u7b97\u3059\u308b\u3002O(\u221aN)\n    pub fn mex(&self) -> usize {\n        let mut k = 1;\n        loop {\n            if self.sz[k] == 0 {\n                return k;\n            }\n            k += 1;\n        }\n    }\n\n    pub fn entry_point(mut self) {\n        let (_, QN) = read!(usize, usize);\n        let A = read![[i64]];\n        let Q = read![i32, i64, i64; QN];\n\n        let mut compressor = HashMap::with_capacity(N);\n        let mut sigma = |a: i64| {\n            let m = compressor.len();\n            let e = compressor.entry(a).or_insert(m);\n            *e\n        };\n\n        let A = A.iter().map(|&a| sigma(a)).vec();\n        self.a = A.clone();\n        let mut TA = A;\n\n        for i in 0..QN {\n            let (t, l, r) = Q[i];\n\n            if t == 1 {\n                let l = (l - 1) as usize;\n                let r = (r - 1) as usize;\n\n                self.mex_query.push(Query {\n                    t: self.ch_query.len(),\n                    x: l,\n                    y: r,\n                });\n            } else {\n                let l = (l - 1) as usize;\n                let (x, y) = (TA[l], sigma(r));\n                self.ch_query.push(Query {\n                    t: l as usize,\n                    x: x,\n                    y: y,\n                });\n                TA[l] = y;\n            }\n        }\n\n        // \u30d6\u30ed\u30c3\u30af\u3054\u3068\u306b\u30af\u30a8\u30ea\u30fc\u3092\u5206\u985e\n        let M = self.mex_query.len();\n        for qi in 0..M {\n            let Query { t, x, y } = self.mex_query[qi];\n            let (i, j) = (t / SZ, x / SZ);\n            self.mx[i][j].insert((y, qi));\n        }\n\n        let mut answers = vec![0; M];\n\n        for i in 0..B {\n            for j in 0..B {\n                let mx = std::mem::replace(&mut self.mx[i][j], HashSet::default());\n                for (_, qi) in mx {\n                    let Query { t, x: l, y: r } = self.mex_query[qi];\n\n                    // (T, L, R) \u3092\u4e0e\u3048\u3089\u308c\u305f (t, l, r) \u306b\u8fd1\u3065\u3051\u3066\u3044\u304f\u3002\n\n                    while self.R < r as isize {\n                        self.pr();\n                    }\n                    while self.R > r as isize {\n                        self.mr();\n                    }\n                    while self.L < l as isize {\n                        self.pl();\n                    }\n                    while self.L > l as isize {\n                        self.ml();\n                    }\n                    while ((self.T + 1) as usize) < t {\n                        self.pt();\n                    }\n                    while ((self.T + 1) as usize) > t {\n                        self.mt();\n                    }\n\n                    // assert!(\n                    //     (self.T + 1) as usize == t && self.L == l as isize && self.R == r as isize\n                    // );\n\n                    // debug!(self.T, self.L, self.R, &self.ct[0..5], &self.sz[0..5]);\n\n                    answers[qi] = self.mex();\n                }\n            }\n        }\n\n        for mex in answers {\n            println!(\"{}\", mex);\n        }\n    }\n}\n\npub fn main() {\n    Solver::new().entry_point();\n}\n\n// problem\n// http://codeforces.com/contest/940/problem/F\n\n// ref [CF 940 F - Machine Learning - \u88cf\u7d19](http://imulan.hatenablog.jp/entry/2018/03/22/182619)\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "4ec9cbc2054331f42603b48f1cff01dc", "src_uid": "eb6362941b5186d20721c99fb4808d52", "difficulty": 2600}
  25. {"lang": "Rust", "source_code": "#![allow(unused_imports)]\n#![allow(non_snake_case)]\n#![allow(non_shorthand_field_patterns)]\n\nuse std::cmp::{max, min, Ordering};\nuse std::collections::*;\nuse std::fmt::{Debug, Formatter};\nuse std::io::*;\nuse std::ops::*;\nuse std::rc::Rc;\nuse std::*;\n\n// -----------------------------------------------\n// Framework\n// -----------------------------------------------\n\n#[allow(unused_macros)]\nmacro_rules! read {\n    ([$t:ty] ; $n:expr) =>\n        ((0..$n).map(|_| read!([$t])).collect::<Vec<_>>());\n    ($($t:ty),+ ; $n:expr) =>\n        ((0..$n).map(|_| read!($($t),+)).collect::<Vec<_>>());\n    ([$t:ty]) =>\n        (rl().split_whitespace().map(|w| w.parse().unwrap()).collect::<Vec<$t>>());\n    ($t:ty) =>\n        (rl().parse::<$t>().unwrap());\n    ($($t:ty),*) => {{\n        let buf = rl();\n        let mut w = buf.split_whitespace();\n        ($(w.next().unwrap().parse::<$t>().unwrap()),*)\n    }};\n}\n\n#[allow(unused_macros)]\nmacro_rules! debug {\n    ($($arg:expr),*) => {\n        #[cfg(debug_assertions)]\n        {\n            let entries = [$(&stringify!([$arg]:), &$arg as &Debug),*];\n            stderr().write_fmt(format_args!(\"{:#?}\\n\", entries)).unwrap();\n        }\n    };\n}\n\n#[allow(dead_code)]\nfn rl() -> String {\n    let mut buf = String::new();\n    io::stdin().read_line(&mut buf).unwrap();\n    buf.trim_right().to_owned()\n}\n\ntrait IteratorExt: Iterator + Sized {\n    fn vec(self) -> Vec<Self::Item> {\n        self.collect()\n    }\n}\n\nimpl<T: Iterator> IteratorExt for T {}\n\n// -----------------------------------------------\n// Solution\n// -----------------------------------------------\n\n#[derive(Clone, Copy, Debug)]\nstruct Query {\n    t: usize,\n    x: usize,\n    y: usize,\n}\n\n// \u5ea7\u6a19\u5727\u7e2e\u5f8c\u306e\u6570\u5217\u306e\u5024\u306e\u6700\u5927\u5024\nconst N: usize = 200000;\n\n// \u30d0\u30b1\u30c3\u30c8\u306e\u30b5\u30a4\u30ba (~~ N^(2/3))\nconst SZ: usize = 2100;\n\n// \u30d0\u30b1\u30c3\u30c8\u6570\u306e\u6700\u5927\u5024 (>= N/SZ)\nconst B: usize = 60;\n\nstruct Solver {\n    /// \u66f4\u65b0\u30af\u30a8\u30ea\u30fc\u3092t\u500b\u5b9f\u884c\u3057\u305f\u5f8c\u306e\u533a\u9593 [x, y] \u306e mex \u3092\u7b54\u3048\u308b\u30af\u30a8\u30ea\u30fc\n    mex_query: Vec<Query>,\n    /// t\u756a\u76ee\u306e\u8981\u7d20\u3092x\u304b\u3089y\u306b\u5909\u66f4\u3059\u308b\u30af\u30a8\u30ea\u30fc\n    ch_query: Vec<Query>,\n    /// T\u500b\u306e\u30af\u30a8\u30ea\u30fc\u306e\u5b9f\u884c\u5f8c\u306b\u304a\u3051\u308b\u533a\u9593 [L, R] \u306b\u6ce8\u76ee\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u8868\u3059\u3002\n    T: isize,\n    L: isize,\n    R: isize,\n    /// ct[a] = \u6570\u5024 a \u304c\u73fe\u5728\u306e\u533a\u9593\u306b\u73fe\u308c\u308b\u56de\u6570\n    ct: Vec<usize>,\n    /// sz[k] = \u73fe\u5728\u306e\u533a\u9593\u306b\u304a\u3044\u3066\u3001\u3061\u3087\u3046\u3069 k \u56de\u51fa\u73fe\u3059\u308b\u6570\u5024\u306e\u500b\u6570\n    sz: Vec<i32>,\n    /// \u73fe\u5728\u306e(T\u500b\u306e\u30af\u30a8\u30ea\u30fc\u306e\u5b9f\u884c\u5f8c\u306e)\u6570\u5217\n    a: Vec<usize>,\n    mx: Vec<Vec<Vec<(usize, usize)>>>,\n}\n\nimpl Solver {\n    pub fn new() -> Solver {\n        Solver {\n            mex_query: Vec::new(),\n            ch_query: Vec::new(),\n            ct: vec![0; N],\n            sz: vec![0; N],\n            a: Vec::new(),\n            L: 0,\n            R: -1,\n            T: -1,\n            mx: vec![vec![Vec::new(); B]; B],\n        }\n    }\n\n    fn inspect(&self) {\n        let M = 10;\n        debug!(self.T, self.L, self.R, &self.ct[0..M], &self.sz[0..M]);\n    }\n\n    // R += 1\n    pub fn pr(&mut self) {\n        // self.inspect();\n\n        self.R += 1;\n        let R = self.R as usize;\n\n        // \u533a\u9593\u306b\u8ffd\u52a0\u3055\u308c\u308b\u8981\u7d20\n        let a = self.a[R];\n\n        // \u66f4\u65b0\u524d\u306b\u3001a \u304c\u533a\u9593\u5185\u306b\u51fa\u73fe\u3057\u3066\u3044\u305f\u56de\u6570\n        let k = self.ct[a];\n\n        // a \u306e\u51fa\u73fe\u3059\u308b\u56de\u6570\u306f1\u56de\u5897\u3048\u308b\u3002\n        self.ct[a] += 1;\n\n        // \u300ck \u56de\u51fa\u73fe\u3059\u308b\u6570\u5024\u300d\u306f a \u304c\u6d88\u3048\u30661\u6e1b\u308a\u3001(k + 1) \u56de\u3003\u306fa\u304c\u52a0\u308f\u3063\u30661\u5897\u3048\u308b\u3002\n        self.sz[k] -= 1;\n        self.sz[k + 1] += 1;\n    }\n\n    // \u4e0a\u3068\u540c\u69d8\u3002a\u306e\u51fa\u73fe\u3059\u308b\u56de\u6570\u306f\u6e1b\u308b\u3002\n    pub fn pl(&mut self) {\n        // self.inspect();\n        let a = self.a[self.L as usize];\n\n        self.sz[self.ct[a]] -= 1;\n        self.ct[a] -= 1;\n        self.sz[self.ct[a]] += 1;\n\n        self.L += 1;\n    }\n\n    pub fn mr(&mut self) {\n        // self.inspect();\n        assert!(self.R >= 0);\n        let R = self.R as usize;\n\n        let a = self.a[R];\n        self.sz[self.ct[a]] -= 1;\n        self.ct[a] -= 1;\n        self.sz[self.ct[a]] += 1;\n\n        self.R -= 1;\n    }\n\n    pub fn ml(&mut self) {\n        // self.inspect();\n        assert!(self.L >= 1);\n        self.L -= 1;\n\n        let a = self.a[self.L as usize];\n        self.sz[self.ct[a]] -= 1;\n        self.ct[a] += 1;\n        self.sz[self.ct[a]] += 1;\n    }\n\n    fn update(&mut self, i: usize, x: usize, y: usize) {\n        // i \u756a\u76ee\u306e\u8981\u7d20\u3092 x \u304b\u3089 y\u306b\u5909\u66f4\u3059\u308b\n        assert!(self.a[i] == x);\n\n        if self.in_focus(i) {\n            // x \u306e\u51fa\u73fe\u3059\u308b\u56de\u6570\u304c\u6e1b\u308b\n            let a = self.a[i];\n            self.sz[self.ct[a]] -= 1;\n            self.ct[a] -= 1;\n            self.sz[self.ct[a]] += 1;\n        }\n\n        self.a[i] = y;\n\n        if self.in_focus(i) {\n            // y \u306e\u51fa\u73fe\u3059\u308b\u56de\u6570\u304c\u6e1b\u308b\n            let a = self.a[i];\n            self.sz[self.ct[a]] -= 1;\n            self.ct[a] += 1;\n            self.sz[self.ct[a]] += 1;\n        }\n    }\n\n    // T += 1\n    pub fn pt(&mut self) {\n        // self.inspect();\n        self.T += 1;\n        let Query { t: i, x, y } = self.ch_query[self.T as usize];\n        self.update(i, x, y);\n    }\n\n    /// T -= 1\n    pub fn mt(&mut self) {\n        // self.inspect();\n        let Query { t: i, x, y } = self.ch_query[self.T as usize];\n        self.update(i, y, x);\n        self.T -= 1;\n    }\n\n    /// \u6307\u5b9a\u3055\u308c\u305f\u4f4d\u7f6e\u304c\u73fe\u5728\u306e\u533a\u9593\u306b\u542b\u307e\u308c\u3066\u3044\u308b\u304b\uff1f\n    pub fn in_focus(&self, i: usize) -> bool {\n        self.L <= i as isize && i as isize <= self.R\n    }\n\n    /// \u73fe\u5728\u306e\u533a\u9593\u306e mex \u3092\u8a08\u7b97\u3059\u308b\u3002O(\u221aN)\n    pub fn mex(&self) -> usize {\n        let mut k = 1;\n        loop {\n            if self.sz[k] == 0 {\n                return k;\n            }\n            k += 1;\n        }\n    }\n\n    pub fn entry_point(mut self, A: Vec<i64>, Q: Vec<(i32, i64, i64)>) -> Vec<usize> {\n        let mut compressor = BTreeMap::new();\n        let mut sigma = |a: i64| {\n            let m = compressor.len();\n            let e = compressor.entry(a).or_insert(m);\n            *e\n        };\n\n        let A = A.iter().map(|&a| sigma(a)).vec();\n        self.a = A.clone();\n        let mut TA = A;\n\n        for i in 0..Q.len() {\n            let (t, l, r) = Q[i];\n\n            if t == 1 {\n                let l = (l - 1) as usize;\n                let r = (r - 1) as usize;\n\n                self.mex_query.push(Query {\n                    t: self.ch_query.len(),\n                    x: l,\n                    y: r,\n                });\n            } else {\n                let l = (l - 1) as usize;\n                let (x, y) = (TA[l], sigma(r));\n                self.ch_query.push(Query {\n                    t: l as usize,\n                    x: x,\n                    y: y,\n                });\n                TA[l] = y;\n            }\n        }\n\n        // \u30d6\u30ed\u30c3\u30af\u3054\u3068\u306b\u30af\u30a8\u30ea\u30fc\u3092\u5206\u985e\n        // \u30d6\u30ed\u30c3\u30af\u30b5\u30a4\u30ba\u3092SZ\u3068\u3059\u308b\u3068\u3001\u5404\u30d6\u30ed\u30c3\u30af\u306b\u304a\u3044\u3066 t,l \u306f O(SZ) \u3057\u304b\u5909\u5316\u3057\u306a\u3044\u3053\u3068\u306b\u3067\u304d\u308b\u3002\n        // \u30d6\u30ed\u30c3\u30af\u5185\u306e\u30af\u30a8\u30ea\u30fc\u3092 r \u306b\u3064\u3044\u3066\u30bd\u30fc\u30c8\u3059\u308c\u3070 r \u306f\u5358\u8abf\u5897\u52a0\u3059\u308b\u306e\u3067\u30011\u30d6\u30ed\u30c3\u30af\u3042\u305f\u308a O(N/SZ) \u6642\u9593\u304b\u304b\u308b\u3002\n\n        let M = self.mex_query.len();\n        for qi in 0..M {\n            let Query { t, x, y } = self.mex_query[qi];\n            let (i, j) = (t / SZ, x / SZ);\n            self.mx[i][j].push((y, qi));\n        }\n\n        let mut answers = vec![0; M];\n\n        for vs in std::mem::replace(&mut self.mx, Vec::default()) {\n            for mut ws in vs {\n                ws.sort();\n\n                for (_, qi) in ws {\n                    let Query { t, x: l, y: r } = self.mex_query[qi];\n\n                    // (T, L, R) \u3092\u4e0e\u3048\u3089\u308c\u305f (t, l, r) \u306b\u8fd1\u3065\u3051\u3066\u3044\u304f\u3002\n                    // L \u304c R \u3092\u8ffd\u3044\u8d8a\u3055\u306a\u3044\u3088\u3046\u306b\u6ce8\u610f\u3002\n\n                    while self.L > l as isize {\n                        self.ml();\n                    }\n                    while self.R < r as isize {\n                        self.pr();\n                    }\n                    while self.L < l as isize {\n                        self.pl();\n                    }\n                    while self.R > r as isize {\n                        self.mr();\n                    }\n                    while ((self.T + 1) as usize) < t {\n                        self.pt();\n                    }\n                    while ((self.T + 1) as usize) > t {\n                        self.mt();\n                    }\n\n                    // assert!(\n                    //     (self.T + 1) as usize == t && self.L == l as isize && self.R == r as isize\n                    // );\n\n                    // debug!(self.T, self.L, self.R, &self.ct[0..5], &self.sz[0..5]);\n\n                    answers[qi] = self.mex();\n                }\n            }\n        }\n\n        answers\n    }\n}\n\npub fn main() {\n    let (_, QN) = read!(usize, usize);\n    let A = read![[i64]];\n    let Q = read![i32, i64, i64; QN];\n\n    let answers = Solver::new().entry_point(A, Q);\n    for mex in answers {\n        println!(\"{}\", mex);\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    #[test]\n    fn test_sample1() {\n        let A = vec![1, 2, 3, 1, 1, 2, 2, 2, 9, 9];\n        let Q = vec![(1, 1, 1), (1, 2, 8), (2, 7, 1), (1, 2, 8)];\n        let answer = Solver::new().entry_point(A, Q);\n        assert_eq!(answer, vec![2, 3, 2]);\n    }\n\n    #[test]\n    fn test() {\n        let M = 100;\n        let QN = 10;\n        let A = (0..N).map(|i| (i * i * i % 17 + 1) as i64).vec();\n        let Q = (0..QN)\n            .map(|i| {\n                let l = (i * i * i % M) as i64;\n                let r = (l + (M - l) / 2) as i64;\n                let t = (i % 2) as i32;\n                (t + 1, l + 1, r + 1)\n            })\n            .vec();\n\n        let answer = Solver::new().entry_point(A, Q);\n        assert_eq!(answer, vec![1, 1, 3, 4, 4]);\n    }\n}\n\n// problem\n// http://codeforces.com/contest/940/problem/F\n\n// ref [CF 940 F - Machine Learning - \u88cf\u7d19](http://imulan.hatenablog.jp/entry/2018/03/22/182619)\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "a32865b069a3287a4c21dcad61842052", "src_uid": "eb6362941b5186d20721c99fb4808d52", "difficulty": 2600}
  26. {"lang": "Rust", "source_code": "#![allow(unused_imports)]\n#![allow(non_snake_case)]\n#![allow(non_shorthand_field_patterns)]\n\nuse std::cmp::{max, min, Ordering};\nuse std::collections::*;\nuse std::fmt::{Debug, Formatter};\nuse std::io::*;\nuse std::ops::*;\nuse std::rc::Rc;\nuse std::*;\n\n// -----------------------------------------------\n// Framework\n// -----------------------------------------------\n\n#[allow(unused_macros)]\nmacro_rules! read {\n    ([$t:ty] ; $n:expr) =>\n        ((0..$n).map(|_| read!([$t])).collect::<Vec<_>>());\n    ($($t:ty),+ ; $n:expr) =>\n        ((0..$n).map(|_| read!($($t),+)).collect::<Vec<_>>());\n    ([$t:ty]) =>\n        (rl().split_whitespace().map(|w| w.parse().unwrap()).collect::<Vec<$t>>());\n    ($t:ty) =>\n        (rl().parse::<$t>().unwrap());\n    ($($t:ty),*) => {{\n        let buf = rl();\n        let mut w = buf.split_whitespace();\n        ($(w.next().unwrap().parse::<$t>().unwrap()),*)\n    }};\n}\n\n#[allow(unused_macros)]\nmacro_rules! debug {\n    ($($arg:expr),*) => {\n        #[cfg(debug_assertions)]\n        {\n            let entries = [$(&stringify!([$arg]:), &$arg as &Debug),*];\n            stderr().write_fmt(format_args!(\"{:#?}\\n\", entries)).unwrap();\n        }\n    };\n}\n\n#[allow(dead_code)]\nfn rl() -> String {\n    let mut buf = String::new();\n    io::stdin().read_line(&mut buf).unwrap();\n    buf.trim_right().to_owned()\n}\n\ntrait IteratorExt: Iterator + Sized {\n    fn vec(self) -> Vec<Self::Item> {\n        self.collect()\n    }\n}\n\nimpl<T: Iterator> IteratorExt for T {}\n\n// -----------------------------------------------\n// Solution\n// -----------------------------------------------\n\n// ref [CF 940 F - Machine Learning - \u88cf\u7d19](http://imulan.hatenablog.jp/entry/2018/03/22/182619)\n\n#[derive(Clone, Copy, Debug)]\nstruct Query {\n    t: usize,\n    x: usize,\n    y: usize,\n}\n\n// \u5ea7\u6a19\u5727\u7e2e\u5f8c\u306e\u6570\u5217\u306e\u5024\u306e\u6700\u5927\u5024\nconst N: usize = 200000;\n\n// \u30d0\u30b1\u30c3\u30c8\u306e\u30b5\u30a4\u30ba (~~ N^(2/3))\nconst SZ: usize = 2100;\n\n// \u30d0\u30b1\u30c3\u30c8\u6570\u306e\u6700\u5927\u5024 (>= N/SZ)\nconst B: usize = 60;\n\nstruct Solver {\n    /// \u66f4\u65b0\u30af\u30a8\u30ea\u30fc\u3092t\u500b\u5b9f\u884c\u3057\u305f\u5f8c\u306e\u533a\u9593 [x, y] \u306e mex \u3092\u7b54\u3048\u308b\u30af\u30a8\u30ea\u30fc\n    mex_query: Vec<Query>,\n    /// t\u756a\u76ee\u306e\u8981\u7d20\u3092x\u304b\u3089y\u306b\u5909\u66f4\u3059\u308b\u30af\u30a8\u30ea\u30fc\n    ch_query: Vec<Query>,\n    /// T\u500b\u306e\u30af\u30a8\u30ea\u30fc\u306e\u5b9f\u884c\u5f8c\u306b\u304a\u3051\u308b\u533a\u9593 [L, R] \u306b\u6ce8\u76ee\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u8868\u3059\u3002\n    T: isize,\n    L: usize,\n    R: isize,\n    /// ct[a] = \u6570\u5024 a \u304c\u73fe\u5728\u306e\u533a\u9593\u306b\u73fe\u308c\u308b\u56de\u6570\n    ct: Vec<usize>,\n    /// sz[k] = \u73fe\u5728\u306e\u533a\u9593\u306b\u304a\u3044\u3066\u3001\u3061\u3087\u3046\u3069 k \u56de\u51fa\u73fe\u3059\u308b\u6570\u5024\u306e\u500b\u6570\n    sz: Vec<usize>,\n    /// \u73fe\u5728\u306e(T\u500b\u306e\u30af\u30a8\u30ea\u30fc\u306e\u5b9f\u884c\u5f8c\u306e)\u6570\u5217\n    a: Vec<usize>,\n    mx: Vec<Vec<HashSet<(usize, usize)>>>,\n}\n\nimpl Solver {\n    pub fn new() -> Solver {\n        let mut solver = Solver {\n            mex_query: Vec::new(),\n            ch_query: Vec::new(),\n            ct: vec![0; N],\n            sz: vec![0; N],\n            a: Vec::new(),\n            L: 0,\n            R: -1,\n            T: -1,\n            mx: vec![vec![HashSet::new(); B]; B],\n        };\n        solver.sz[0] = std::usize::MAX / 2;\n        solver\n    }\n\n    // R += 1\n    pub fn pr(&mut self) {\n        self.R += 1;\n        let R = self.R as usize;\n\n        // \u533a\u9593\u306b\u8ffd\u52a0\u3055\u308c\u308b\u8981\u7d20\n        let a = self.a[R];\n\n        // \u66f4\u65b0\u524d\u306b\u3001a \u304c\u533a\u9593\u5185\u306b\u51fa\u73fe\u3057\u3066\u3044\u305f\u56de\u6570\n        let k = self.ct[a];\n\n        // a \u306e\u51fa\u73fe\u3059\u308b\u56de\u6570\u306f1\u56de\u5897\u3048\u308b\u3002\n        self.ct[a] += 1;\n\n        // \u300ck \u56de\u51fa\u73fe\u3059\u308b\u6570\u5024\u300d\u306f a \u304c\u6d88\u3048\u30661\u6e1b\u308a\u3001(k + 1) \u56de\u3003\u306fa\u304c\u52a0\u308f\u3063\u30661\u5897\u3048\u308b\u3002\n        self.sz[k] -= 1;\n        self.sz[k + 1] += 1;\n    }\n\n    // \u4e0a\u3068\u540c\u69d8\u3002a\u306e\u51fa\u73fe\u3059\u308b\u56de\u6570\u306f\u6e1b\u308b\u3002\n    pub fn pl(&mut self) {\n        let a = self.a[self.L];\n\n        self.sz[self.ct[a]] -= 1;\n        self.ct[a] -= 1;\n        self.sz[self.ct[a]] += 1;\n\n        self.L += 1;\n    }\n\n    pub fn mr(&mut self) {\n        assert!(self.R >= 0);\n        let R = self.R as usize;\n\n        let a = self.a[R];\n        self.sz[self.ct[a]] -= 1;\n        self.ct[a] -= 1;\n        self.sz[self.ct[a]] += 1;\n\n        self.R -= 1;\n    }\n\n    pub fn ml(&mut self) {\n        assert!(self.L >= 1);\n\n        let a = self.a[self.L];\n        self.sz[self.ct[a]] -= 1;\n        self.ct[a] += 1;\n        self.sz[self.ct[a]] += 1;\n\n        self.L -= 1;\n    }\n\n    fn update(&mut self, i: usize, x: usize, y: usize) {\n        // i \u756a\u76ee\u306e\u8981\u7d20\u3092 x \u304b\u3089 y\u306b\u5909\u66f4\u3059\u308b\n        assert!(self.a[i] == x);\n\n        if self.in_focus(i) {\n            // x \u306e\u51fa\u73fe\u3059\u308b\u56de\u6570\u304c\u6e1b\u308b\n            let a = self.a[i];\n            self.sz[self.ct[a]] -= 1;\n            self.ct[a] -= 1;\n            self.sz[self.ct[a]] += 1;\n        }\n\n        self.a[i] = y;\n\n        if self.in_focus(i) {\n            // y \u306e\u51fa\u73fe\u3059\u308b\u56de\u6570\u304c\u6e1b\u308b\n            let a = self.a[i];\n            self.sz[self.ct[a]] -= 1;\n            self.ct[a] += 1;\n            self.sz[self.ct[a]] += 1;\n        }\n    }\n\n    // T += 1\n    pub fn pt(&mut self) {\n        self.T += 1;\n        let Query { t: i, x: x, y: y } = self.ch_query[self.T as usize];\n        self.update(i, x, y);\n    }\n\n    /// T -= 1\n    pub fn mt(&mut self) {\n        let Query { t: i, x: x, y: y } = self.ch_query[self.T as usize];\n        self.update(i, y, x);\n        self.T -= 1;\n    }\n\n    /// \u6307\u5b9a\u3055\u308c\u305f\u4f4d\u7f6e\u304c\u73fe\u5728\u306e\u533a\u9593\u306b\u542b\u307e\u308c\u3066\u3044\u308b\u304b\uff1f\n    pub fn in_focus(&self, i: usize) -> bool {\n        self.L <= i && i as isize <= self.R\n    }\n\n    /// \u73fe\u5728\u306e\u533a\u9593\u306e mex \u3092\u8a08\u7b97\u3059\u308b\u3002O(\u221aN)\n    pub fn mex(&self) -> usize {\n        let mut k = 1;\n        loop {\n            if self.sz[k] == 0 {\n                return k;\n            }\n            k += 1;\n        }\n    }\n\n    pub fn entry_point(mut self) {\n        let (_, QN) = read!(usize, usize);\n        let A = read![[i64]];\n        let Q = read![i32, i64, i64; QN];\n\n        let mut compressor = HashMap::with_capacity(N);\n        let mut sigma = |a: i64| {\n            let m = compressor.len();\n            let e = compressor.entry(a).or_insert(m);\n            *e\n        };\n\n        let A = A.iter().map(|&a| sigma(a)).vec();\n        self.a = A.clone();\n        let mut TA = A;\n\n        for i in 0..QN {\n            let (t, l, r) = Q[i];\n\n            if t == 1 {\n                let l = (l - 1) as usize;\n                let r = (r - 1) as usize;\n\n                self.mex_query.push(Query {\n                    t: self.ch_query.len(),\n                    x: l,\n                    y: r,\n                });\n            } else {\n                let l = (l - 1) as usize;\n                let (x, y) = (TA[l], sigma(r));\n                self.ch_query.push(Query {\n                    t: l as usize,\n                    x: x,\n                    y: y,\n                });\n                TA[l] = y;\n            }\n        }\n\n        // \u30d6\u30ed\u30c3\u30af\u3054\u3068\u306b\u30af\u30a8\u30ea\u30fc\u3092\u5206\u985e\n        let M = self.mex_query.len();\n        for qi in 0..M {\n            let Query { t: t, x: x, y: y } = self.mex_query[qi];\n            let (i, j) = (t / SZ, x / SZ);\n            self.mx[i][j].insert((y, qi));\n        }\n\n        let mut answers = vec![0; M];\n\n        for i in 0..B {\n            for j in 0..B {\n                let mx = std::mem::replace(&mut self.mx[i][j], HashSet::default());\n                for (_, qi) in mx {\n                    let Query { t: t, x: l, y: r } = self.mex_query[qi];\n\n                    // (T, L, R) \u3092\u4e0e\u3048\u3089\u308c\u305f (t, l, r) \u306b\u8fd1\u3065\u3051\u3066\u3044\u304f\u3002\n\n                    while self.R < r as isize {\n                        self.pr();\n                    }\n                    while self.R > r as isize {\n                        self.mr();\n                    }\n                    while self.L < l {\n                        self.pl();\n                    }\n                    while self.L > l {\n                        self.ml();\n                    }\n                    while ((self.T + 1) as usize) < t {\n                        self.pt();\n                    }\n                    while ((self.T + 1) as usize) > t {\n                        self.mt();\n                    }\n\n                    assert!((self.T + 1) as usize == t && self.L == l && self.R as usize == r);\n\n                    // debug!(self.T, self.L, self.R, &self.ct[0..5], &self.sz[0..5]);\n\n                    answers[qi] = self.mex();\n                }\n            }\n        }\n\n        for mex in answers {\n            println!(\"{}\", mex);\n        }\n    }\n}\n\npub fn main() {\n    Solver::new().entry_point();\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "53042937dfaf3136becbc8647d26d46a", "src_uid": "eb6362941b5186d20721c99fb4808d52", "difficulty": 2600}
  27. {"lang": "Rust", "source_code": "#![allow(unused_imports)]\n#![allow(non_snake_case)]\n#![allow(non_shorthand_field_patterns)]\n\nuse std::cmp::{max, min, Ordering};\nuse std::collections::*;\nuse std::fmt::{Debug, Formatter};\nuse std::io::*;\nuse std::ops::*;\nuse std::rc::Rc;\nuse std::*;\n\n// -----------------------------------------------\n// Framework\n// -----------------------------------------------\n\n#[allow(unused_macros)]\nmacro_rules! read {\n    ([$t:ty] ; $n:expr) =>\n        ((0..$n).map(|_| read!([$t])).collect::<Vec<_>>());\n    ($($t:ty),+ ; $n:expr) =>\n        ((0..$n).map(|_| read!($($t),+)).collect::<Vec<_>>());\n    ([$t:ty]) =>\n        (rl().split_whitespace().map(|w| w.parse().unwrap()).collect::<Vec<$t>>());\n    ($t:ty) =>\n        (rl().parse::<$t>().unwrap());\n    ($($t:ty),*) => {{\n        let buf = rl();\n        let mut w = buf.split_whitespace();\n        ($(w.next().unwrap().parse::<$t>().unwrap()),*)\n    }};\n}\n\n#[allow(unused_macros)]\nmacro_rules! debug {\n    ($($arg:expr),*) => {\n        #[cfg(debug_assertions)]\n        {\n            let entries = [$(&stringify!([$arg]:), &$arg as &Debug),*];\n            stderr().write_fmt(format_args!(\"{:#?}\\n\", entries)).unwrap();\n        }\n    };\n}\n\n#[allow(dead_code)]\nfn rl() -> String {\n    let mut buf = String::new();\n    io::stdin().read_line(&mut buf).unwrap();\n    buf.trim_right().to_owned()\n}\n\ntrait IteratorExt: Iterator + Sized {\n    fn vec(self) -> Vec<Self::Item> {\n        self.collect()\n    }\n}\n\nimpl<T: Iterator> IteratorExt for T {}\n\n// -----------------------------------------------\n// Solution\n// -----------------------------------------------\n\n#[derive(Clone, Copy, Debug)]\nstruct Query {\n    t: usize,\n    x: usize,\n    y: usize,\n}\n\n// \u5ea7\u6a19\u5727\u7e2e\u5f8c\u306e\u6570\u5217\u306e\u5024\u306e\u6700\u5927\u5024\nconst N: usize = 200000;\n\n// \u30d0\u30b1\u30c3\u30c8\u306e\u30b5\u30a4\u30ba (~~ N^(2/3))\nconst SZ: usize = 2100;\n\n// \u30d0\u30b1\u30c3\u30c8\u6570\u306e\u6700\u5927\u5024 (>= N/SZ)\nconst B: usize = 60;\n\nstruct Solver {\n    /// \u66f4\u65b0\u30af\u30a8\u30ea\u30fc\u3092t\u500b\u5b9f\u884c\u3057\u305f\u5f8c\u306e\u533a\u9593 [x, y] \u306e mex \u3092\u7b54\u3048\u308b\u30af\u30a8\u30ea\u30fc\n    mex_query: Vec<Query>,\n    /// t\u756a\u76ee\u306e\u8981\u7d20\u3092x\u304b\u3089y\u306b\u5909\u66f4\u3059\u308b\u30af\u30a8\u30ea\u30fc\n    ch_query: Vec<Query>,\n    /// T\u500b\u306e\u30af\u30a8\u30ea\u30fc\u306e\u5b9f\u884c\u5f8c\u306b\u304a\u3051\u308b\u533a\u9593 [L, R] \u306b\u6ce8\u76ee\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u8868\u3059\u3002\n    T: isize,\n    L: isize,\n    R: isize,\n    /// ct[a] = \u6570\u5024 a \u304c\u73fe\u5728\u306e\u533a\u9593\u306b\u73fe\u308c\u308b\u56de\u6570\n    ct: Vec<usize>,\n    /// sz[k] = \u73fe\u5728\u306e\u533a\u9593\u306b\u304a\u3044\u3066\u3001\u3061\u3087\u3046\u3069 k \u56de\u51fa\u73fe\u3059\u308b\u6570\u5024\u306e\u500b\u6570\n    sz: Vec<i32>,\n    /// \u73fe\u5728\u306e(T\u500b\u306e\u30af\u30a8\u30ea\u30fc\u306e\u5b9f\u884c\u5f8c\u306e)\u6570\u5217\n    a: Vec<usize>,\n    mx: Vec<Vec<HashSet<(usize, usize)>>>,\n}\n\nimpl Solver {\n    pub fn new() -> Solver {\n        Solver {\n            mex_query: Vec::new(),\n            ch_query: Vec::new(),\n            ct: vec![0; N],\n            sz: vec![0; N],\n            a: Vec::new(),\n            L: 0,\n            R: -1,\n            T: -1,\n            mx: vec![vec![HashSet::new(); B]; B],\n        }\n    }\n\n    fn inspect(&self) {\n        let M = 10;\n        debug!(self.T, self.L, self.R, &self.ct[0..M], &self.sz[0..M]);\n    }\n\n    // R += 1\n    pub fn pr(&mut self) {\n        // self.inspect();\n\n        self.R += 1;\n        let R = self.R as usize;\n\n        // \u533a\u9593\u306b\u8ffd\u52a0\u3055\u308c\u308b\u8981\u7d20\n        let a = self.a[R];\n\n        // \u66f4\u65b0\u524d\u306b\u3001a \u304c\u533a\u9593\u5185\u306b\u51fa\u73fe\u3057\u3066\u3044\u305f\u56de\u6570\n        let k = self.ct[a];\n\n        // a \u306e\u51fa\u73fe\u3059\u308b\u56de\u6570\u306f1\u56de\u5897\u3048\u308b\u3002\n        self.ct[a] += 1;\n\n        // \u300ck \u56de\u51fa\u73fe\u3059\u308b\u6570\u5024\u300d\u306f a \u304c\u6d88\u3048\u30661\u6e1b\u308a\u3001(k + 1) \u56de\u3003\u306fa\u304c\u52a0\u308f\u3063\u30661\u5897\u3048\u308b\u3002\n        self.sz[k] -= 1;\n        self.sz[k + 1] += 1;\n    }\n\n    // \u4e0a\u3068\u540c\u69d8\u3002a\u306e\u51fa\u73fe\u3059\u308b\u56de\u6570\u306f\u6e1b\u308b\u3002\n    pub fn pl(&mut self) {\n        // self.inspect();\n        let a = self.a[self.L as usize];\n\n        self.sz[self.ct[a]] -= 1;\n        self.ct[a] -= 1;\n        self.sz[self.ct[a]] += 1;\n\n        self.L += 1;\n    }\n\n    pub fn mr(&mut self) {\n        // self.inspect();\n        assert!(self.R >= 0);\n        let R = self.R as usize;\n\n        let a = self.a[R];\n        self.sz[self.ct[a]] -= 1;\n        self.ct[a] -= 1;\n        self.sz[self.ct[a]] += 1;\n\n        self.R -= 1;\n    }\n\n    pub fn ml(&mut self) {\n        // self.inspect();\n        assert!(self.L >= 1);\n        self.L -= 1;\n\n        let a = self.a[self.L as usize];\n        self.sz[self.ct[a]] -= 1;\n        self.ct[a] += 1;\n        self.sz[self.ct[a]] += 1;\n    }\n\n    fn update(&mut self, i: usize, x: usize, y: usize) {\n        // i \u756a\u76ee\u306e\u8981\u7d20\u3092 x \u304b\u3089 y\u306b\u5909\u66f4\u3059\u308b\n        assert!(self.a[i] == x);\n\n        if self.in_focus(i) {\n            // x \u306e\u51fa\u73fe\u3059\u308b\u56de\u6570\u304c\u6e1b\u308b\n            let a = self.a[i];\n            self.sz[self.ct[a]] -= 1;\n            self.ct[a] -= 1;\n            self.sz[self.ct[a]] += 1;\n        }\n\n        self.a[i] = y;\n\n        if self.in_focus(i) {\n            // y \u306e\u51fa\u73fe\u3059\u308b\u56de\u6570\u304c\u6e1b\u308b\n            let a = self.a[i];\n            self.sz[self.ct[a]] -= 1;\n            self.ct[a] += 1;\n            self.sz[self.ct[a]] += 1;\n        }\n    }\n\n    // T += 1\n    pub fn pt(&mut self) {\n        // self.inspect();\n        self.T += 1;\n        let Query { t: i, x, y } = self.ch_query[self.T as usize];\n        self.update(i, x, y);\n    }\n\n    /// T -= 1\n    pub fn mt(&mut self) {\n        // self.inspect();\n        let Query { t: i, x, y } = self.ch_query[self.T as usize];\n        self.update(i, y, x);\n        self.T -= 1;\n    }\n\n    /// \u6307\u5b9a\u3055\u308c\u305f\u4f4d\u7f6e\u304c\u73fe\u5728\u306e\u533a\u9593\u306b\u542b\u307e\u308c\u3066\u3044\u308b\u304b\uff1f\n    pub fn in_focus(&self, i: usize) -> bool {\n        self.L <= i as isize && i as isize <= self.R\n    }\n\n    /// \u73fe\u5728\u306e\u533a\u9593\u306e mex \u3092\u8a08\u7b97\u3059\u308b\u3002O(\u221aN)\n    pub fn mex(&self) -> usize {\n        let mut k = 1;\n        loop {\n            if self.sz[k] == 0 {\n                return k;\n            }\n            k += 1;\n        }\n    }\n\n    pub fn entry_point(mut self, A: Vec<i64>, Q: Vec<(i32, i64, i64)>) -> Vec<usize> {\n        let mut compressor = HashMap::with_capacity(N);\n        let mut sigma = |a: i64| {\n            let m = compressor.len();\n            let e = compressor.entry(a).or_insert(m);\n            *e\n        };\n\n        let A = A.iter().map(|&a| sigma(a)).vec();\n        self.a = A.clone();\n        let mut TA = A;\n\n        for i in 0..Q.len() {\n            let (t, l, r) = Q[i];\n\n            if t == 1 {\n                let l = (l - 1) as usize;\n                let r = (r - 1) as usize;\n\n                self.mex_query.push(Query {\n                    t: self.ch_query.len(),\n                    x: l,\n                    y: r,\n                });\n            } else {\n                let l = (l - 1) as usize;\n                let (x, y) = (TA[l], sigma(r));\n                self.ch_query.push(Query {\n                    t: l as usize,\n                    x: x,\n                    y: y,\n                });\n                TA[l] = y;\n            }\n        }\n\n        // \u30d6\u30ed\u30c3\u30af\u3054\u3068\u306b\u30af\u30a8\u30ea\u30fc\u3092\u5206\u985e\n        let M = self.mex_query.len();\n        for qi in 0..M {\n            let Query { t, x, y } = self.mex_query[qi];\n            let (i, j) = (t / SZ, x / SZ);\n            self.mx[i][j].insert((y, qi));\n        }\n\n        let mut answers = vec![0; M];\n\n        for i in 0..B {\n            for j in 0..B {\n                let mx = std::mem::replace(&mut self.mx[i][j], HashSet::default());\n                for (_, qi) in mx {\n                    let Query { t, x: l, y: r } = self.mex_query[qi];\n\n                    // (T, L, R) \u3092\u4e0e\u3048\u3089\u308c\u305f (t, l, r) \u306b\u8fd1\u3065\u3051\u3066\u3044\u304f\u3002\n\n                    while self.L > l as isize {\n                        self.ml();\n                    }\n                    while self.R < r as isize {\n                        self.pr();\n                    }\n                    while self.L < l as isize {\n                        self.pl();\n                    }\n                    while self.R > r as isize {\n                        self.mr();\n                    }\n                    while ((self.T + 1) as usize) < t {\n                        self.pt();\n                    }\n                    while ((self.T + 1) as usize) > t {\n                        self.mt();\n                    }\n\n                    // assert!(\n                    //     (self.T + 1) as usize == t && self.L == l as isize && self.R == r as isize\n                    // );\n\n                    // debug!(self.T, self.L, self.R, &self.ct[0..5], &self.sz[0..5]);\n\n                    answers[qi] = self.mex();\n                }\n            }\n        }\n\n        answers\n    }\n}\n\npub fn main() {\n    let (_, QN) = read!(usize, usize);\n    let A = read![[i64]];\n    let Q = read![i32, i64, i64; QN];\n\n    let answers = Solver::new().entry_point(A, Q);\n    for mex in answers {\n        println!(\"{}\", mex);\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    #[test]\n    fn test_sample1() {\n        let M = 10;\n        let QN = 4;\n        let A = vec![1, 2, 3, 1, 1, 2, 2, 2, 9, 9];\n        let Q = vec![(1, 1, 1), (1, 2, 8), (2, 7, 1), (1, 2, 8)];\n        let answer = Solver::new().entry_point(A, Q);\n        assert_eq!(answer, vec![2, 3, 2]);\n    }\n\n    #[test]\n    fn test() {\n        let M = 100;\n        let QN = 10;\n        let A = (0..N).map(|i| (i * i * i % 17 + 1) as i64).vec();\n        let Q = (0..QN)\n            .map(|i| {\n                let l = (i * i * i % M) as i64;\n                let r = (l + (M - l) / 2) as i64;\n                let t = (i % 2) as i32;\n                (t + 1, l + 1, r + 1)\n            })\n            .vec();\n\n        let answer = Solver::new().entry_point(A, Q);\n        assert_eq!(answer, vec![]);\n    }\n}\n\n// problem\n// http://codeforces.com/contest/940/problem/F\n\n// ref [CF 940 F - Machine Learning - \u88cf\u7d19](http://imulan.hatenablog.jp/entry/2018/03/22/182619)\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "7ecc0a9b8ce26b7eb92f7fd1dc8658c1", "src_uid": "eb6362941b5186d20721c99fb4808d52", "difficulty": 2600}
  28. {"lang": "Rust", "source_code": "//https://qiita.com/tanakh/items/0ba42c7ca36cd29d0ac8 \u3088\u308a\nmacro_rules! input {\n    (source = $s:expr, $($r:tt)*) => {\n        let mut iter = $s.split_whitespace();\n        input_inner!{iter, $($r)*}\n    };\n    ($($r:tt)*) => {\n        let s = {\n            use std::io::Read;\n            let mut s = String::new();\n            std::io::stdin().read_to_string(&mut s).unwrap();\n            s\n        };\n        let mut iter = s.split_whitespace();\n        input_inner!{iter, $($r)*}\n    };\n}\n\nmacro_rules! input_inner {\n    ($iter:expr) => {};\n    ($iter:expr, ) => {};\n    ($iter:expr, $var:ident : $t:tt $($r:tt)*) => {\n        let $var = read_value!($iter, $t);\n        input_inner!{$iter $($r)*}\n    };\n}\n\nmacro_rules! read_value {\n    ($iter:expr, ( $($t:tt),* )) => {\n        ( $(read_value!($iter, $t)),* )\n    };\n    ($iter:expr, [ $t:tt ; $len:expr ]) => {\n        (0..$len).map(|_| read_value!($iter, $t)).collect::<Vec<_>>()\n    };\n    ($iter:expr, chars) => {\n        read_value!($iter, String).chars().collect::<Vec<char>>()\n    };\n    ($iter:expr, bytes) => {\n        read_value!($iter, String).bytes().collect::<Vec<u8>>()\n    };\n    ($iter:expr, usize1) => {\n        read_value!($iter, usize) - 1\n    };\n    ($iter:expr, $t:ty) => {\n        $iter.next().unwrap().parse::<$t>().expect(\"Parse error\")\n    };\n}\n\n//\n\n// \u6642\u7a7a\u9593Mo\n// \u5e45N, \u6c42\u5024X, \u66f4\u65b0Y \u3068\u7f6e\u304f\n// \u30d6\u30ed\u30c3\u30af\u30b5\u30a4\u30ba\u3092B\u3068\u3057\u305f\u3068\u304d\u306e\u8a08\u7b97\u91cf\u306f\uff1f\n//\n// 1/2 \u3068\u304b\u7121\u8996\u3057\u3066\n//\n// \u66f4\u65b0\u56de\u6570: (N / B) ^ 2 * Y\n// \u30dd\u30a4\u30f3\u30bf\u3092\u52d5\u304b\u3059\u56de\u6570 X * B\n//\n// \u521d\u671f\u5316\u306e\u8a08\u7b97\u91cf\u3082\u3044\u308b\uff1f (N / B) ^ 2 * N\n// dF/dB = X - (1 / 2) * (N^2 * Y + N^3) / B^3\n//       = (2 * X * B^3 - (N^2 * Y + N^3)) / B^3\n// 2\u306e\u9805\u3092\u7121\u8996\u3057\u3066\uff1f\n// B = ((N^2 * Y + N^3) / X) ^ (2 / 3)\n// X = Y = Q\n// B = (N^2 + N^3 / Q) ^ (2 / 3)\n\nuse std::io::Write;\n\nstruct State {\n    cnt: Vec<usize>,\n    elem: Vec<usize>,\n    mex: usize,\n}\n\nimpl State {\n    fn new(n: usize) -> Self {\n        let mut state = State {\n            cnt: vec![0; n + 1],\n            elem: vec![0; n + 1],\n            mex: 0,\n        };\n        state.init();\n        state\n    }\n    fn init(&mut self) {\n        let len = self.cnt.len();\n        self.cnt.clear();\n        self.cnt.resize(len, 0);\n        self.elem.clear();\n        self.elem.resize(len, 0);\n        self.elem[0] = len;\n        self.mex = 1;\n    }\n    fn insert(&mut self, x: usize) {\n        let c = &mut self.cnt[x];\n        self.elem[*c] -= 1;\n        *c += 1;\n        self.elem[*c] += 1;\n        let p = &mut self.mex;\n        if self.elem[*c - 1] == 0 && *c - 1 < *p {\n            *p = *c - 1;\n        } else if *c == *p {\n            *p += 1;\n        }\n    }\n    fn delete(&mut self, x: usize) {\n        let c = &mut self.cnt[x];\n        self.elem[*c] -= 1;\n        *c -= 1;\n        self.elem[*c] += 1;\n        let p = &mut self.mex;\n        if self.elem[*c + 1] == 0 && *c + 1 < *p {\n            *p = *c + 1;\n        } else if *c == *p {\n            *p += 1;\n        }\n    }\n    fn find(&self) -> usize {\n        self.mex\n    }\n}\n\nfn run() {\n    input! {\n        n: usize,\n        q: usize,\n        a: [usize; n],\n        ask: [(u8, usize1, usize); q],\n    }\n    let mut z = a.clone();\n    for &(_, _, x) in ask.iter().filter(|p| p.0 == 2) {\n        z.push(x);\n    }\n    z.sort();\n    z.dedup();\n    let mut a = a;\n    for a in a.iter_mut() {\n        *a = z.binary_search(a).unwrap();\n    }\n    let mut ask = ask;\n    for p in ask.iter_mut().filter(|p| p.0 == 2) {\n        p.2 = z.binary_search(&p.2).unwrap();\n    }\n    let batch = {\n        1000\n        /*\n        let n = n as f64;\n        let q = q as f64;\n        (n.powi(2) + n.powi(3) / q).cbrt().powi(2) as usize\n        */\n    };\n    let mut update = vec![];\n    let mut query = vec![vec![vec![]; n / batch + 1]; n / batch + 1];\n    for (i, (op, a, b)) in ask.into_iter().enumerate() {\n        if op == 1 {\n            query[a / batch][b / batch].push((a, b, i));\n        } else {\n            update.push((a, b, i));\n        }\n    }\n    let mut ans = vec![0; q];\n    let mut state = State::new(z.len() + n);\n    for (i, q) in query.iter().enumerate() {\n        for q in q.iter() {\n            if q.is_empty() {\n                continue;\n            }\n            state.init();\n            let mut a = a.clone();\n            let mut x = i * batch;\n            let mut y = i * batch;\n            let mut z = 0;\n            for &(l, r, k) in q.iter() {\n                while z < update.len() && update[z].2 < k {\n                    let p = update[z].0;\n                    let v = update[z].1;\n                    if x <= p && p < y {\n                        state.delete(a[p]);\n                        state.insert(v);\n                    }\n                    a[p] = v;\n                    z += 1;\n                }\n                while l < x {\n                    x -= 1;\n                    state.insert(a[x]);\n                }\n                while y < r {\n                    state.insert(a[y]);\n                    y += 1;\n                }\n                while x < l {\n                    state.delete(a[x]);\n                    x += 1;\n                }\n                while r < y {\n                    y -= 1;\n                    state.delete(a[y]);\n                }\n                ans[k] = state.find();\n            }\n        }\n    }\n    let out = std::io::stdout();\n    let mut out = std::io::BufWriter::new(out.lock());\n    for a in ans {\n        if a > 0 {\n            writeln!(out, \"{}\", a).ok();\n        }\n    }\n}\n\nfn main() {\n    run();\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "93a973a1160160130a4a351b36fa2ce0", "src_uid": "eb6362941b5186d20721c99fb4808d52", "difficulty": 2600}
  29. {"lang": "Rust", "source_code": "//https://qiita.com/tanakh/items/0ba42c7ca36cd29d0ac8 \u3088\u308a\nmacro_rules! input {\n    (source = $s:expr, $($r:tt)*) => {\n        let mut iter = $s.split_whitespace();\n        input_inner!{iter, $($r)*}\n    };\n    ($($r:tt)*) => {\n        let s = {\n            use std::io::Read;\n            let mut s = String::new();\n            std::io::stdin().read_to_string(&mut s).unwrap();\n            s\n        };\n        let mut iter = s.split_whitespace();\n        input_inner!{iter, $($r)*}\n    };\n}\n\nmacro_rules! input_inner {\n    ($iter:expr) => {};\n    ($iter:expr, ) => {};\n    ($iter:expr, $var:ident : $t:tt $($r:tt)*) => {\n        let $var = read_value!($iter, $t);\n        input_inner!{$iter $($r)*}\n    };\n}\n\nmacro_rules! read_value {\n    ($iter:expr, ( $($t:tt),* )) => {\n        ( $(read_value!($iter, $t)),* )\n    };\n    ($iter:expr, [ $t:tt ; $len:expr ]) => {\n        (0..$len).map(|_| read_value!($iter, $t)).collect::<Vec<_>>()\n    };\n    ($iter:expr, chars) => {\n        read_value!($iter, String).chars().collect::<Vec<char>>()\n    };\n    ($iter:expr, bytes) => {\n        read_value!($iter, String).bytes().collect::<Vec<u8>>()\n    };\n    ($iter:expr, usize1) => {\n        read_value!($iter, usize) - 1\n    };\n    ($iter:expr, $t:ty) => {\n        $iter.next().unwrap().parse::<$t>().expect(\"Parse error\")\n    };\n}\n\n//\n\n// \u6642\u7a7a\u9593Mo\n// \u5e45N, \u6c42\u5024X, \u66f4\u65b0Y \u3068\u7f6e\u304f\n// \u30d6\u30ed\u30c3\u30af\u30b5\u30a4\u30ba\u3092B\u3068\u3057\u305f\u3068\u304d\u306e\u8a08\u7b97\u91cf\u306f\uff1f\n//\n// 1/2 \u3068\u304b\u7121\u8996\u3057\u3066\n//\n// \u66f4\u65b0\u56de\u6570: (N / B) ^ 2 * Y\n// \u30dd\u30a4\u30f3\u30bf\u3092\u52d5\u304b\u3059\u56de\u6570 X * B\n//\n// \u521d\u671f\u5316\u306e\u8a08\u7b97\u91cf\u3082\u3044\u308b\uff1f (N / B) ^ 2 * N\n// dF/dB = X - (1 / 2) * (N^2 * Y + N^3) / B^3\n//       = (2 * X * B^3 - (N^2 * Y + N^3)) / B^3\n// 2\u306e\u9805\u3092\u7121\u8996\u3057\u3066\uff1f\n// B = ((N^2 * Y + N^3) / X) ^ (2 / 3)\n// X = Y = Q\n// B = (N^2 + N^3 / Q) ^ (2 / 3)\n\nuse std::io::Write;\n\nstruct State {\n    cnt: Vec<usize>,\n    elem: Vec<usize>,\n    mex: usize,\n}\n\nimpl State {\n    fn new(n: usize) -> Self {\n        let mut state = State {\n            cnt: vec![0; n + 1],\n            elem: vec![0; n + 1],\n            mex: 0,\n        };\n        state.init();\n        state\n    }\n    fn init(&mut self) {\n        let len = self.cnt.len();\n        self.cnt.clear();\n        self.cnt.resize(len, 0);\n        self.elem.clear();\n        self.elem.resize(len, 0);\n        self.elem[0] = len;\n        self.mex = 1;\n    }\n    fn insert(&mut self, x: usize) {\n        let c = &mut self.cnt[x];\n        self.elem[*c] -= 1;\n        *c += 1;\n        self.elem[*c] += 1;\n        let p = &mut self.mex;\n        if self.elem[*c - 1] == 0 && *c - 1 < *p {\n            *p = *c - 1;\n        }\n        while self.elem[*p] > 0 {\n            *p += 1;\n        }\n    }\n    fn delete(&mut self, x: usize) {\n        let c = &mut self.cnt[x];\n        self.elem[*c] -= 1;\n        *c -= 1;\n        self.elem[*c] += 1;\n        let p = &mut self.mex;\n        if self.elem[*c + 1] == 0 && *c + 1 < *p {\n            *p = *c + 1;\n        }\n        while self.elem[*p] > 0 {\n            *p += 1;\n        }\n    }\n    fn find(&self) -> usize {\n        self.mex\n    }\n}\n\nfn run() {\n    input! {\n        n: usize,\n        q: usize,\n        a: [usize; n],\n        ask: [(u8, usize1, usize); q],\n    }\n    let mut z = a.clone();\n    for &(_, _, x) in ask.iter().filter(|p| p.0 == 2) {\n        z.push(x);\n    }\n    z.sort();\n    z.dedup();\n    let mut a = a;\n    for a in a.iter_mut() {\n        *a = z.binary_search(a).unwrap();\n    }\n    let mut ask = ask;\n    for p in ask.iter_mut().filter(|p| p.0 == 2) {\n        p.2 = z.binary_search(&p.2).unwrap();\n    }\n    let batch = {\n        let n = n as f64;\n        (n.powi(2) * 8.0).cbrt().ceil() as usize\n    };\n    let mut update = vec![];\n    let mut query = vec![vec![vec![]; n / batch + 1]; n / batch + 1];\n    for (i, (op, a, b)) in ask.into_iter().enumerate() {\n        if op == 1 {\n            query[a / batch][b / batch].push((a, b, i));\n        } else {\n            update.push((a, b, i));\n        }\n    }\n    let mut ans = vec![0; q];\n    let mut state = State::new(z.len() + n);\n    for (i, q) in query.iter().enumerate() {\n        for q in q.iter() {\n            if q.is_empty() {\n                continue;\n            }\n            state.init();\n            let mut a = a.clone();\n            let mut x = i * batch;\n            let mut y = i * batch;\n            let mut z = 0;\n            for &(l, r, k) in q.iter() {\n                while z < update.len() && update[z].2 < k {\n                    let p = update[z].0;\n                    let v = update[z].1;\n                    if x <= p && p < y {\n                        state.delete(a[p]);\n                        state.insert(v);\n                    }\n                    a[p] = v;\n                    z += 1;\n                }\n                while l < x {\n                    x -= 1;\n                    state.insert(a[x]);\n                }\n                while y < r {\n                    state.insert(a[y]);\n                    y += 1;\n                }\n                while x < l {\n                    state.delete(a[x]);\n                    x += 1;\n                }\n                while r < y {\n                    y -= 1;\n                    state.delete(a[y]);\n                }\n                ans[k] = state.find();\n            }\n        }\n    }\n    let out = std::io::stdout();\n    let mut out = std::io::BufWriter::new(out.lock());\n    for a in ans {\n        if a > 0 {\n            writeln!(out, \"{}\", a).ok();\n        }\n    }\n}\n\nfn main() {\n    run();\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "89fa5b8e8b4d76ecf2c4367f51dd58db", "src_uid": "eb6362941b5186d20721c99fb4808d52", "difficulty": 2600}
  30. {"lang": "Rust", "source_code": "//https://qiita.com/tanakh/items/0ba42c7ca36cd29d0ac8 \u3088\u308a\nmacro_rules! input {\n    (source = $s:expr, $($r:tt)*) => {\n        let mut iter = $s.split_whitespace();\n        input_inner!{iter, $($r)*}\n    };\n    ($($r:tt)*) => {\n        let s = {\n            use std::io::Read;\n            let mut s = String::new();\n            std::io::stdin().read_to_string(&mut s).unwrap();\n            s\n        };\n        let mut iter = s.split_whitespace();\n        input_inner!{iter, $($r)*}\n    };\n}\n\nmacro_rules! input_inner {\n    ($iter:expr) => {};\n    ($iter:expr, ) => {};\n    ($iter:expr, $var:ident : $t:tt $($r:tt)*) => {\n        let $var = read_value!($iter, $t);\n        input_inner!{$iter $($r)*}\n    };\n}\n\nmacro_rules! read_value {\n    ($iter:expr, ( $($t:tt),* )) => {\n        ( $(read_value!($iter, $t)),* )\n    };\n    ($iter:expr, [ $t:tt ; $len:expr ]) => {\n        (0..$len).map(|_| read_value!($iter, $t)).collect::<Vec<_>>()\n    };\n    ($iter:expr, chars) => {\n        read_value!($iter, String).chars().collect::<Vec<char>>()\n    };\n    ($iter:expr, bytes) => {\n        read_value!($iter, String).bytes().collect::<Vec<u8>>()\n    };\n    ($iter:expr, usize1) => {\n        read_value!($iter, usize) - 1\n    };\n    ($iter:expr, $t:ty) => {\n        $iter.next().unwrap().parse::<$t>().expect(\"Parse error\")\n    };\n}\n\n//\n\n// \u6642\u7a7a\u9593Mo\n// \u5e45N, \u6c42\u5024X, \u66f4\u65b0Y \u3068\u7f6e\u304f\n// \u30d6\u30ed\u30c3\u30af\u30b5\u30a4\u30ba\u3092B\u3068\u3057\u305f\u3068\u304d\u306e\u8a08\u7b97\u91cf\u306f\uff1f\n//\n// 1/2 \u3068\u304b\u7121\u8996\u3057\u3066\n//\n// \u66f4\u65b0\u56de\u6570: (N / B) ^ 2 * Y\n// \u30dd\u30a4\u30f3\u30bf\u3092\u52d5\u304b\u3059\u56de\u6570 X * B\n//\n// \u521d\u671f\u5316\u306e\u8a08\u7b97\u91cf\u3082\u3044\u308b\uff1f (N / B) ^ 2 * N\n// dF/dB = X - (1 / 2) * (N^2 * Y + N^3) / B^3\n//       = (2 * X * B^3 - (N^2 * Y + N^3)) / B^3\n// 2\u306e\u9805\u3092\u7121\u8996\u3057\u3066\uff1f\n// B = ((N^2 * Y + N^3) / X) ^ (2 / 3)\n// X = Y = Q\n// B = (N^2 + N^3 / Q) ^ (2 / 3)\n\nuse std::io::Write;\n\nstruct State {\n    cnt: Vec<usize>,\n    elem: Vec<usize>,\n    mex: usize,\n}\n\nimpl State {\n    fn new(n: usize) -> Self {\n        let mut state = State {\n            cnt: vec![0; n + 1],\n            elem: vec![0; n + 1],\n            mex: 0,\n        };\n        state.init();\n        state\n    }\n    fn init(&mut self) {\n        let len = self.cnt.len();\n        self.cnt.clear();\n        self.cnt.resize(len, 0);\n        self.elem.clear();\n        self.elem.resize(len, 0);\n        self.elem[0] = len;\n        self.mex = 1;\n    }\n    fn insert(&mut self, x: usize) {\n        let c = &mut self.cnt[x];\n        self.elem[*c] -= 1;\n        *c += 1;\n        self.elem[*c] += 1;\n        let p = &mut self.mex;\n        if self.elem[*c - 1] == 0 && *c - 1 < *p {\n            *p = *c - 1;\n        }\n        while self.elem[*p] > 0 {\n            *p += 1;\n        }\n    }\n    fn delete(&mut self, x: usize) {\n        let c = &mut self.cnt[x];\n        self.elem[*c] -= 1;\n        *c -= 1;\n        self.elem[*c] += 1;\n        let p = &mut self.mex;\n        if self.elem[*c + 1] == 0 && *c + 1 < *p {\n            *p = *c + 1;\n        }\n        while self.elem[*p] > 0 {\n            *p += 1;\n        }\n    }\n    fn find(&self) -> usize {\n        self.mex\n    }\n}\n\nfn run() {\n    input! {\n        n: usize,\n        q: usize,\n        a: [usize; n],\n        ask: [(u8, usize1, usize); q],\n    }\n    let mut z = a.clone();\n    for &(_, _, x) in ask.iter().filter(|p| p.0 == 2) {\n        z.push(x);\n    }\n    z.sort();\n    z.dedup();\n    let mut a = a;\n    for a in a.iter_mut() {\n        *a = z.binary_search(a).unwrap();\n    }\n    let mut ask = ask;\n    for p in ask.iter_mut().filter(|p| p.0 == 2) {\n        p.2 = z.binary_search(&p.2).unwrap();\n    }\n    let batch = {\n        2154\n        /*\n        let n = n as f64;\n        let q = q as f64;\n        (n.powi(2) + n.powi(3) / q).cbrt().powi(2) as usize\n        */\n    };\n    let mut update = vec![];\n    let mut query = vec![vec![vec![]; n / batch + 1]; n / batch + 1];\n    for (i, (op, a, b)) in ask.into_iter().enumerate() {\n        if op == 1 {\n            query[a / batch][b / batch].push((a, b, i));\n        } else {\n            update.push((a, b, i));\n        }\n    }\n    let mut ans = vec![0; q];\n    let mut state = State::new(z.len() + n);\n    for (i, q) in query.iter().enumerate() {\n        for q in q.iter() {\n            if q.is_empty() {\n                continue;\n            }\n            state.init();\n            let mut a = a.clone();\n            let mut x = i * batch;\n            let mut y = i * batch;\n            let mut z = 0;\n            for &(l, r, k) in q.iter() {\n                while z < update.len() && update[z].2 < k {\n                    let p = update[z].0;\n                    let v = update[z].1;\n                    if x <= p && p < y {\n                        state.delete(a[p]);\n                        state.insert(v);\n                    }\n                    a[p] = v;\n                    z += 1;\n                }\n                while l < x {\n                    x -= 1;\n                    state.insert(a[x]);\n                }\n                while y < r {\n                    state.insert(a[y]);\n                    y += 1;\n                }\n                while x < l {\n                    state.delete(a[x]);\n                    x += 1;\n                }\n                while r < y {\n                    y -= 1;\n                    state.delete(a[y]);\n                }\n                ans[k] = state.find();\n            }\n        }\n    }\n    let out = std::io::stdout();\n    let mut out = std::io::BufWriter::new(out.lock());\n    for a in ans {\n        if a > 0 {\n            writeln!(out, \"{}\", a).ok();\n        }\n    }\n}\n\nfn main() {\n    run();\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "cf551eff198b533729c493e16a085969", "src_uid": "eb6362941b5186d20721c99fb4808d52", "difficulty": 2600}
  31. {"lang": "Rust", "source_code": "use std::io;\n\n\nfn main() {\n    let (_, k) = {\n        let i = read::<usize>();\n        (i[0], i[1])\n    };\n    let mut an = read::<usize>();\n    an.sort();\n\n    let ans = if k == 0 { an[0] - 1 } else { an[k - 1] };\n\n    let mut cnt = 0;\n    for a in an {\n        if a <= ans { cnt += 1; }\n    }\n\n    if cnt != k || !(1 <= ans && ans <= 10e9 as usize) {\n        println!(\"-1\"); return;\n    }\n    println!(\"{}\", ans);\n}\n\n\n#[allow(dead_code)]\nfn read<T>() -> Vec<T>\nwhere T:\nstd::str::FromStr,\nT::Err: std::fmt::Debug {\n\n    let mut buf = String::new();\n    io::stdin().read_line(&mut buf).unwrap();\n    buf.split_whitespace()\n        .map(|s| s.trim().parse().unwrap())\n        .collect()\n}\n\n#[allow(dead_code)]\nfn read_one<T>() -> T\nwhere T:\nstd::str::FromStr,\nT::Err: std::fmt::Debug {\n\n    let mut buf = String::new();\n    io::stdin().read_line(&mut buf).unwrap();\n    buf.trim().parse().unwrap()\n}", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "0d195fa54637b168f210a8b2b619a10c", "src_uid": "55297e2a65144323af4d6abd6a6ef050", "difficulty": 1200}
  32. {"lang": "Rust", "source_code": "//spnauti-rusT\nuse std::io::*;\nuse std::str::{self,*};\nuse std::fmt::Debug;\n#[allow(unused_imports)] use std::cmp::Ordering::{self,*};\n#[allow(unused_imports)] use std::ops::{self,*};\n#[allow(unused_imports)] use std::iter::{self,*};\n#[allow(unused_imports)] use std::collections::*;\n#[allow(unused_macros)]\nmacro_rules! m {\n    ($c:tt, $x:expr, $y:expr) => {{\n        let b = $y; let a = &mut $x;\n        if b $c *a { *a = b; true } else { false }\n    }};\n}\n#[allow(unused_macros)]\nmacro_rules! l {\n    ($($v:ident),* = $i:ident.$f:ident $a:tt) => {\n        $( let $v = $i.$f$a; )*\n    };\n    ($($v:ident),*:$t:ty = $i:ident.$f:ident $a:tt) => {\n        $( let $v:$t = $i.$f$a; )*\n    };\n}\nstruct WordReader<'a> { it : SplitAsciiWhitespace<'a> }\n#[allow(dead_code)]\nimpl<'a> WordReader<'a> {\n    fn new<T: Read>(b: &mut String, mut r: T) -> WordReader {\n        b.clear();\n        r.read_to_string(b).ok();\n        WordReader { it: b.split_ascii_whitespace() }\n    }\n    fn from_stdin(b: &mut String) -> WordReader {\n        WordReader::new(b, stdin())\n    }\n    fn sl(&mut self) ->  &str { self.it.next().unwrap() }\n    fn bs(&mut self) -> &[u8] { self.sl().as_bytes()    }\n    fn s(&mut self) -> String { String::from(self.sl()) }\n    fn i(&mut self) ->    i32 { self.p()                }\n    fn f(&mut self) ->    f64 { self.p()                }\n    fn u(&mut self) ->  usize { self.p()                }\n    fn sk(&mut self, n: usize) { self.it.nth(n - 1); }\n    fn ii(&mut self, n: usize) -> impl Iterator<Item=i32> {\n        self.ip(n).into_iter()\n    }\n    fn vi(&mut self, n: usize) -> Vec<i32> {\n        self.vp::<i32>(n)\n    }\n    fn p<T: FromStr>(&mut self) -> T where T::Err: Debug {\n        self.sl().parse::<T>().unwrap()\n    }\n    fn ip<T: FromStr>(&mut self, n: usize) -> impl Iterator<Item=T> where T::Err: Debug {\n        self.vp(n).into_iter()\n    }\n    fn vp<T: FromStr>(&mut self, n: usize) -> Vec<T> where T::Err: Debug {\n        (0..n).map(|_| self.p()).collect()\n    }\n}\n//------------------- End rusT\n\nfn main() {\n    let mut bin = String::new();\n    let mut input = WordReader::from_stdin(&mut bin);\n\n    let n = input.u();\n    let k = input.u();\n    let mut a = input.vi(n);\n    a.sort();\n    if (k == 0 && a[0] == 1) || (k < n && a[k - 1] == a[k]) {\n        println!(\"-1\");\n    } else if k == 0{\n        println!(\"1\");\n    } else {\n        println!(\"{}\", a[k - 1]);\n    }\n}\n\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "794415695fbf8b1b4f9f695e6a00d844", "src_uid": "55297e2a65144323af4d6abd6a6ef050", "difficulty": 1200}
  33. {"lang": "Rust", "source_code": "//spnauti-rusT\nuse std::io::*;\nuse std::str::{self,*};\nuse std::fmt::Debug;\n#[allow(unused_imports)] use std::cmp::Ordering::{self,*};\n#[allow(unused_imports)] use std::ops::{self,*};\n#[allow(unused_imports)] use std::iter::{self,*};\n#[allow(unused_imports)] use std::collections::*;\n#[allow(unused_macros)]\nmacro_rules! m {\n    ($c:tt, $x:expr, $y:expr) => {{\n        let b = $y; let a = &mut $x;\n        if b $c *a { *a = b; true } else { false }\n    }};\n}\n#[allow(unused_macros)]\nmacro_rules! l {\n    ($($v:ident),* = $i:ident.$f:ident $a:tt) => {\n        $( let $v = $i.$f$a; )*\n    };\n    ($($v:ident),*:$t:ty = $i:ident.$f:ident $a:tt) => {\n        $( let $v:$t = $i.$f$a; )*\n    };\n}\nstruct WordReader<'a> { it : SplitAsciiWhitespace<'a> }\n#[allow(dead_code)]\nimpl<'a> WordReader<'a> {\n    fn new<T: Read>(b: &mut String, mut r: T) -> WordReader {\n        b.clear();\n        r.read_to_string(b).ok();\n        WordReader { it: b.split_ascii_whitespace() }\n    }\n    fn from_stdin(b: &mut String) -> WordReader {\n        WordReader::new(b, stdin())\n    }\n    fn sl(&mut self) ->  &str { self.it.next().unwrap() }\n    fn bs(&mut self) -> &[u8] { self.sl().as_bytes()    }\n    fn s(&mut self) -> String { String::from(self.sl()) }\n    fn i(&mut self) ->    i32 { self.p()                }\n    fn f(&mut self) ->    f64 { self.p()                }\n    fn u(&mut self) ->  usize { self.p()                }\n    fn sk(&mut self, n: usize) { self.it.nth(n - 1); }\n    fn ii(&mut self, n: usize) -> impl Iterator<Item=i32> {\n        self.ip(n).into_iter()\n    }\n    fn vi(&mut self, n: usize) -> Vec<i32> {\n        self.vp::<i32>(n)\n    }\n    fn p<T: FromStr>(&mut self) -> T where T::Err: Debug {\n        self.sl().parse::<T>().unwrap()\n    }\n    fn ip<T: FromStr>(&mut self, n: usize) -> impl Iterator<Item=T> where T::Err: Debug {\n        self.vp(n).into_iter()\n    }\n    fn vp<T: FromStr>(&mut self, n: usize) -> Vec<T> where T::Err: Debug {\n        (0..n).map(|_| self.p()).collect()\n    }\n}\n//------------------- End rusT\n\nfn main() {\n    let mut bin = String::new();\n    let mut input = WordReader::from_stdin(&mut bin);\n\n    let n = input.u();\n    let k = input.u();\n    let mut a = input.vi(n);\n    a.sort();\n    if (k == 0 && a[0] == 1) || (k > 0 && k < n && a[k - 1] == a[k]) {\n        println!(\"-1\");\n    } else if k == 0 {\n        println!(\"1\");\n    } else {\n        println!(\"{}\", a[k - 1]);\n    }\n}\n\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "aa5c9f4696b075de7aa32cd4d6a85563", "src_uid": "55297e2a65144323af4d6abd6a6ef050", "difficulty": 1200}
  34. {"lang": "Rust", "source_code": "#![allow(unused_imports)]\n#![allow(unused_macros)]\n#![allow(dead_code)]\n#![allow(unused_labels)]\n\nuse std::char::*;\nuse std::cmp::*;\nuse std::collections::*;\nuse std::io::*;\nuse std::str::FromStr;\n\nmacro_rules! debug {($($a:expr),*) => {eprintln!(concat!($(stringify!($a), \" = {:?}, \"),*), $($a),*);}}\nmacro_rules! input { ( source = $ s : expr , $ ( $ r : tt ) * ) => { let mut iter = $ s . split_whitespace ( ) ; let mut next = || { iter . next ( ) . unwrap ( ) } ; input_inner ! { next , $ ( $ r ) * } } ; ( $ ( $ r : tt ) * ) => { let stdin = std :: io :: stdin ( ) ; let mut bytes = std :: io :: Read :: bytes ( std :: io :: BufReader :: new ( stdin . lock ( ) ) ) ; let mut next = move || -> String { bytes . by_ref ( ) . map ( | r | r . unwrap ( ) as char ) . skip_while ( | c | c . is_whitespace ( ) ) . take_while ( | c |! c . is_whitespace ( ) ) . collect ( ) } ; input_inner ! { next , $ ( $ r ) * } } ; }\nmacro_rules! input_inner { ( $ next : expr ) => { } ; ( $ next : expr , ) => { } ; ( $ next : expr , $ var : ident : $ t : tt $ ( $ r : tt ) * ) => { let $ var = read_value ! ( $ next , $ t ) ; input_inner ! { $ next $ ( $ r ) * } } ; }\nmacro_rules! read_value { ( $ next : expr , ( $ ( $ t : tt ) ,* ) ) => { ( $ ( read_value ! ( $ next , $ t ) ) ,* ) } ; ( $ next : expr , [ $ t : tt ; $ len : expr ] ) => { ( 0 ..$ len ) . map ( | _ | read_value ! ( $ next , $ t ) ) . collect ::< Vec < _ >> ( ) } ; ( $ next : expr , chars ) => { read_value ! ( $ next , String ) . chars ( ) . collect ::< Vec < char >> ( ) } ; ( $ next : expr , usize1 ) => { read_value ! ( $ next , usize ) - 1 } ; ( $ next : expr , $ t : ty ) => { $ next ( ) . parse ::<$ t > ( ) . expect ( \"Parse error\" ) } ; }\n\n\nfn read<T: FromStr>() -> T {\n    let stdin = stdin();\n    let stdin = stdin.lock();\n    let token: String = stdin\n        .bytes()\n        .map(|c| c.expect(\"failed to read char\") as char)\n        .skip_while(|c| c.is_whitespace())\n        .take_while(|c| !c.is_whitespace())\n        .collect();\n    token.parse().ok().expect(\"failed to parse token\")\n}\n\nuse std::f64;\n\nfn min<T: PartialOrd>(a:T, b:T) -> T {\n    if a < b { a }\n    else { b }\n}\n\nfn max<T: PartialOrd>(a:T, b:T) -> T {\n    if a < b { b }\n    else { a }\n}\n\nconst MAX:usize = 30;\nconst INF:i64 = std::i64::MAX;\nconst MOD:i64 = 1e9 as i64 + 7;\n\nstruct Graph {\n    e: Vec<Vec<usize>>,\n    v: Vec<usize>,\n    u: Vec<usize>,\n    f: Vec<bool>,\n    c: i64,\n    vc: Vec<i64>,\n}\n\nimpl Graph {\n    fn new(n:usize) -> Self {\n        Graph {\n            e: vec![vec![];n],\n            v: vec![],\n            u: vec![n;n],\n            f: vec![false;n],\n            c: 0,\n            vc: vec![0;n],\n        }\n    }\n\n    fn dfs(&mut self, crt: usize) {\n        if self.f[crt] { return; }\n        self.c += 1;\n        self.f[crt] = true;\n        self.v.push(crt);\n        self.vc[crt] = self.c;\n        self.u[crt] = self.v.len()-1;\n        for i in 0..self.e[crt].len() {\n            self.dfs(self.e[crt][i]);\n        }\n        //debug!(crt, self.c, self.vc[crt]);\n        self.vc[crt] = self.c - self.vc[crt];\n    }\n}\n\nfn binary_search(s: &Vec<i64>, v:i64) -> usize {\n    let mut left = 0;\n    let mut right = s.len();\n\n    while right-left > 1 {\n        let mid = (right+left)/2;\n        //debug!(left,mid,right,s[mid]);\n        if s[mid] < v { left = mid; }\n        else { right = mid; }\n    }\n    left\n}\n\nfn main() {\n    //let t:usize = read();\n\n    //'outer: for _ in 0..t {\n        let n:usize = read();\n        let k:usize = read();\n        let mut a:Vec<i64> = (0..n).map(|_| read()).collect();\n\n        a.sort();\n\n        if a[k-1] == a[k] {\n            println!(\"-1\");\n        } else {\n            println!(\"{}\", a[k-1]);\n        }\n\n    //}\n}\n\n/*\n\n\n*/\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "c9f5ff0d0176504510b4c0b39d298576", "src_uid": "55297e2a65144323af4d6abd6a6ef050", "difficulty": 1200}
  35. {"lang": "Rust", "source_code": "#![allow(unused_imports)]\n#![allow(unused_macros)]\n#![allow(dead_code)]\n#![allow(unused_labels)]\n\nuse std::char::*;\nuse std::cmp::*;\nuse std::collections::*;\nuse std::io::*;\nuse std::str::FromStr;\n\nmacro_rules! debug {($($a:expr),*) => {eprintln!(concat!($(stringify!($a), \" = {:?}, \"),*), $($a),*);}}\nmacro_rules! input { ( source = $ s : expr , $ ( $ r : tt ) * ) => { let mut iter = $ s . split_whitespace ( ) ; let mut next = || { iter . next ( ) . unwrap ( ) } ; input_inner ! { next , $ ( $ r ) * } } ; ( $ ( $ r : tt ) * ) => { let stdin = std :: io :: stdin ( ) ; let mut bytes = std :: io :: Read :: bytes ( std :: io :: BufReader :: new ( stdin . lock ( ) ) ) ; let mut next = move || -> String { bytes . by_ref ( ) . map ( | r | r . unwrap ( ) as char ) . skip_while ( | c | c . is_whitespace ( ) ) . take_while ( | c |! c . is_whitespace ( ) ) . collect ( ) } ; input_inner ! { next , $ ( $ r ) * } } ; }\nmacro_rules! input_inner { ( $ next : expr ) => { } ; ( $ next : expr , ) => { } ; ( $ next : expr , $ var : ident : $ t : tt $ ( $ r : tt ) * ) => { let $ var = read_value ! ( $ next , $ t ) ; input_inner ! { $ next $ ( $ r ) * } } ; }\nmacro_rules! read_value { ( $ next : expr , ( $ ( $ t : tt ) ,* ) ) => { ( $ ( read_value ! ( $ next , $ t ) ) ,* ) } ; ( $ next : expr , [ $ t : tt ; $ len : expr ] ) => { ( 0 ..$ len ) . map ( | _ | read_value ! ( $ next , $ t ) ) . collect ::< Vec < _ >> ( ) } ; ( $ next : expr , chars ) => { read_value ! ( $ next , String ) . chars ( ) . collect ::< Vec < char >> ( ) } ; ( $ next : expr , usize1 ) => { read_value ! ( $ next , usize ) - 1 } ; ( $ next : expr , $ t : ty ) => { $ next ( ) . parse ::<$ t > ( ) . expect ( \"Parse error\" ) } ; }\n\n\nfn read<T: FromStr>() -> T {\n    let stdin = stdin();\n    let stdin = stdin.lock();\n    let token: String = stdin\n        .bytes()\n        .map(|c| c.expect(\"failed to read char\") as char)\n        .skip_while(|c| c.is_whitespace())\n        .take_while(|c| !c.is_whitespace())\n        .collect();\n    token.parse().ok().expect(\"failed to parse token\")\n}\n\nuse std::f64;\n\nfn min<T: PartialOrd>(a:T, b:T) -> T {\n    if a < b { a }\n    else { b }\n}\n\nfn max<T: PartialOrd>(a:T, b:T) -> T {\n    if a < b { b }\n    else { a }\n}\n\nconst MAX:usize = 30;\nconst INF:i64 = std::i64::MAX;\nconst MOD:i64 = 1e9 as i64 + 7;\n\nstruct Graph {\n    e: Vec<Vec<usize>>,\n    v: Vec<usize>,\n    u: Vec<usize>,\n    f: Vec<bool>,\n    c: i64,\n    vc: Vec<i64>,\n}\n\nimpl Graph {\n    fn new(n:usize) -> Self {\n        Graph {\n            e: vec![vec![];n],\n            v: vec![],\n            u: vec![n;n],\n            f: vec![false;n],\n            c: 0,\n            vc: vec![0;n],\n        }\n    }\n\n    fn dfs(&mut self, crt: usize) {\n        if self.f[crt] { return; }\n        self.c += 1;\n        self.f[crt] = true;\n        self.v.push(crt);\n        self.vc[crt] = self.c;\n        self.u[crt] = self.v.len()-1;\n        for i in 0..self.e[crt].len() {\n            self.dfs(self.e[crt][i]);\n        }\n        //debug!(crt, self.c, self.vc[crt]);\n        self.vc[crt] = self.c - self.vc[crt];\n    }\n}\n\nfn binary_search(s: &Vec<i64>, v:i64) -> usize {\n    let mut left = 0;\n    let mut right = s.len();\n\n    while right-left > 1 {\n        let mid = (right+left)/2;\n        //debug!(left,mid,right,s[mid]);\n        if s[mid] < v { left = mid; }\n        else { right = mid; }\n    }\n    left\n}\n\nfn main() {\n    //let t:usize = read();\n\n    //'outer: for _ in 0..t {\n        let n:usize = read();\n        let k:usize = read();\n        let mut a:Vec<i64> = (0..n).map(|_| read()).collect();\n\n        a.sort();\n        if k == 0 {\n            if a[0] == 1 {\n                println!(\"-1\");\n            } else {\n                println!(\"1\");\n            }\n            return;\n        }\n        if k == n {\n            println!(\"{}\", a[k-1]);\n            return;\n        }\n\n        if a[k-1] == a[k] {\n            println!(\"-1\");\n        } else {\n            println!(\"{}\", a[k-1]);\n        }\n\n    //}\n}\n\n/*\n\n\n*/\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "a08d9c584e1fc2221b741e30811e84b5", "src_uid": "55297e2a65144323af4d6abd6a6ef050", "difficulty": 1200}
  36. {"lang": "Rust", "source_code": "#![allow(unused_imports)]\n#![allow(unused_macros)]\n#![allow(dead_code)]\n#![allow(unused_labels)]\n\nuse std::char::*;\nuse std::cmp::*;\nuse std::collections::*;\nuse std::io::*;\nuse std::str::FromStr;\n\nmacro_rules! debug {($($a:expr),*) => {eprintln!(concat!($(stringify!($a), \" = {:?}, \"),*), $($a),*);}}\nmacro_rules! input { ( source = $ s : expr , $ ( $ r : tt ) * ) => { let mut iter = $ s . split_whitespace ( ) ; let mut next = || { iter . next ( ) . unwrap ( ) } ; input_inner ! { next , $ ( $ r ) * } } ; ( $ ( $ r : tt ) * ) => { let stdin = std :: io :: stdin ( ) ; let mut bytes = std :: io :: Read :: bytes ( std :: io :: BufReader :: new ( stdin . lock ( ) ) ) ; let mut next = move || -> String { bytes . by_ref ( ) . map ( | r | r . unwrap ( ) as char ) . skip_while ( | c | c . is_whitespace ( ) ) . take_while ( | c |! c . is_whitespace ( ) ) . collect ( ) } ; input_inner ! { next , $ ( $ r ) * } } ; }\nmacro_rules! input_inner { ( $ next : expr ) => { } ; ( $ next : expr , ) => { } ; ( $ next : expr , $ var : ident : $ t : tt $ ( $ r : tt ) * ) => { let $ var = read_value ! ( $ next , $ t ) ; input_inner ! { $ next $ ( $ r ) * } } ; }\nmacro_rules! read_value { ( $ next : expr , ( $ ( $ t : tt ) ,* ) ) => { ( $ ( read_value ! ( $ next , $ t ) ) ,* ) } ; ( $ next : expr , [ $ t : tt ; $ len : expr ] ) => { ( 0 ..$ len ) . map ( | _ | read_value ! ( $ next , $ t ) ) . collect ::< Vec < _ >> ( ) } ; ( $ next : expr , chars ) => { read_value ! ( $ next , String ) . chars ( ) . collect ::< Vec < char >> ( ) } ; ( $ next : expr , usize1 ) => { read_value ! ( $ next , usize ) - 1 } ; ( $ next : expr , $ t : ty ) => { $ next ( ) . parse ::<$ t > ( ) . expect ( \"Parse error\" ) } ; }\n\n\nfn read<T: FromStr>() -> T {\n    let stdin = stdin();\n    let stdin = stdin.lock();\n    let token: String = stdin\n        .bytes()\n        .map(|c| c.expect(\"failed to read char\") as char)\n        .skip_while(|c| c.is_whitespace())\n        .take_while(|c| !c.is_whitespace())\n        .collect();\n    token.parse().ok().expect(\"failed to parse token\")\n}\n\nuse std::f64;\n\nfn min<T: PartialOrd>(a:T, b:T) -> T {\n    if a < b { a }\n    else { b }\n}\n\nfn max<T: PartialOrd>(a:T, b:T) -> T {\n    if a < b { b }\n    else { a }\n}\n\nconst MAX:usize = 30;\nconst INF:i64 = std::i64::MAX;\nconst MOD:i64 = 1e9 as i64 + 7;\n\nstruct Graph {\n    e: Vec<Vec<usize>>,\n    v: Vec<usize>,\n    u: Vec<usize>,\n    f: Vec<bool>,\n    c: i64,\n    vc: Vec<i64>,\n}\n\nimpl Graph {\n    fn new(n:usize) -> Self {\n        Graph {\n            e: vec![vec![];n],\n            v: vec![],\n            u: vec![n;n],\n            f: vec![false;n],\n            c: 0,\n            vc: vec![0;n],\n        }\n    }\n\n    fn dfs(&mut self, crt: usize) {\n        if self.f[crt] { return; }\n        self.c += 1;\n        self.f[crt] = true;\n        self.v.push(crt);\n        self.vc[crt] = self.c;\n        self.u[crt] = self.v.len()-1;\n        for i in 0..self.e[crt].len() {\n            self.dfs(self.e[crt][i]);\n        }\n        //debug!(crt, self.c, self.vc[crt]);\n        self.vc[crt] = self.c - self.vc[crt];\n    }\n}\n\nfn binary_search(s: &Vec<i64>, v:i64) -> usize {\n    let mut left = 0;\n    let mut right = s.len();\n\n    while right-left > 1 {\n        let mid = (right+left)/2;\n        //debug!(left,mid,right,s[mid]);\n        if s[mid] < v { left = mid; }\n        else { right = mid; }\n    }\n    left\n}\n\nfn main() {\n    //let t:usize = read();\n\n    //'outer: for _ in 0..t {\n        let n:usize = read();\n        let k:usize = read();\n        let mut a:Vec<i64> = (0..n).map(|_| read()).collect();\n\n        a.sort();\n        if k == 0 {\n            println!(\"0\");\n            return;\n        }\n        if k == n {\n            println!(\"{}\", a[k-1]);\n            return;\n        }\n\n        if a[k-1] == a[k] {\n            println!(\"-1\");\n        } else {\n            println!(\"{}\", a[k-1]);\n        }\n\n    //}\n}\n\n/*\n\n\n*/\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "c70ba88514f51b3f143e4ac643e82d1f", "src_uid": "55297e2a65144323af4d6abd6a6ef050", "difficulty": 1200}
  37. {"lang": "Rust", "source_code": "#![allow(unused_imports)]\n#![allow(unused_macros)]\n#![allow(dead_code)]\n#![allow(unused_labels)]\n\nuse std::char::*;\nuse std::cmp::*;\nuse std::collections::*;\nuse std::io::*;\nuse std::str::FromStr;\n\nmacro_rules! debug {($($a:expr),*) => {eprintln!(concat!($(stringify!($a), \" = {:?}, \"),*), $($a),*);}}\nmacro_rules! input { ( source = $ s : expr , $ ( $ r : tt ) * ) => { let mut iter = $ s . split_whitespace ( ) ; let mut next = || { iter . next ( ) . unwrap ( ) } ; input_inner ! { next , $ ( $ r ) * } } ; ( $ ( $ r : tt ) * ) => { let stdin = std :: io :: stdin ( ) ; let mut bytes = std :: io :: Read :: bytes ( std :: io :: BufReader :: new ( stdin . lock ( ) ) ) ; let mut next = move || -> String { bytes . by_ref ( ) . map ( | r | r . unwrap ( ) as char ) . skip_while ( | c | c . is_whitespace ( ) ) . take_while ( | c |! c . is_whitespace ( ) ) . collect ( ) } ; input_inner ! { next , $ ( $ r ) * } } ; }\nmacro_rules! input_inner { ( $ next : expr ) => { } ; ( $ next : expr , ) => { } ; ( $ next : expr , $ var : ident : $ t : tt $ ( $ r : tt ) * ) => { let $ var = read_value ! ( $ next , $ t ) ; input_inner ! { $ next $ ( $ r ) * } } ; }\nmacro_rules! read_value { ( $ next : expr , ( $ ( $ t : tt ) ,* ) ) => { ( $ ( read_value ! ( $ next , $ t ) ) ,* ) } ; ( $ next : expr , [ $ t : tt ; $ len : expr ] ) => { ( 0 ..$ len ) . map ( | _ | read_value ! ( $ next , $ t ) ) . collect ::< Vec < _ >> ( ) } ; ( $ next : expr , chars ) => { read_value ! ( $ next , String ) . chars ( ) . collect ::< Vec < char >> ( ) } ; ( $ next : expr , usize1 ) => { read_value ! ( $ next , usize ) - 1 } ; ( $ next : expr , $ t : ty ) => { $ next ( ) . parse ::<$ t > ( ) . expect ( \"Parse error\" ) } ; }\n\n\nfn read<T: FromStr>() -> T {\n    let stdin = stdin();\n    let stdin = stdin.lock();\n    let token: String = stdin\n        .bytes()\n        .map(|c| c.expect(\"failed to read char\") as char)\n        .skip_while(|c| c.is_whitespace())\n        .take_while(|c| !c.is_whitespace())\n        .collect();\n    token.parse().ok().expect(\"failed to parse token\")\n}\n\nuse std::f64;\n\nfn min<T: PartialOrd>(a:T, b:T) -> T {\n    if a < b { a }\n    else { b }\n}\n\nfn max<T: PartialOrd>(a:T, b:T) -> T {\n    if a < b { b }\n    else { a }\n}\n\nconst MAX:usize = 30;\nconst INF:i64 = std::i64::MAX;\nconst MOD:i64 = 1e9 as i64 + 7;\n\nstruct Graph {\n    e: Vec<Vec<usize>>,\n    v: Vec<usize>,\n    u: Vec<usize>,\n    f: Vec<bool>,\n    c: i64,\n    vc: Vec<i64>,\n}\n\nimpl Graph {\n    fn new(n:usize) -> Self {\n        Graph {\n            e: vec![vec![];n],\n            v: vec![],\n            u: vec![n;n],\n            f: vec![false;n],\n            c: 0,\n            vc: vec![0;n],\n        }\n    }\n\n    fn dfs(&mut self, crt: usize) {\n        if self.f[crt] { return; }\n        self.c += 1;\n        self.f[crt] = true;\n        self.v.push(crt);\n        self.vc[crt] = self.c;\n        self.u[crt] = self.v.len()-1;\n        for i in 0..self.e[crt].len() {\n            self.dfs(self.e[crt][i]);\n        }\n        //debug!(crt, self.c, self.vc[crt]);\n        self.vc[crt] = self.c - self.vc[crt];\n    }\n}\n\nfn binary_search(s: &Vec<i64>, v:i64) -> usize {\n    let mut left = 0;\n    let mut right = s.len();\n\n    while right-left > 1 {\n        let mid = (right+left)/2;\n        //debug!(left,mid,right,s[mid]);\n        if s[mid] < v { left = mid; }\n        else { right = mid; }\n    }\n    left\n}\n\nfn main() {\n    //let t:usize = read();\n\n    //'outer: for _ in 0..t {\n        let n:usize = read();\n        let k:usize = read();\n        let mut a:Vec<i64> = (0..n).map(|_| read()).collect();\n\n        a.sort();\n        if k == n {\n            println!(\"{}\", a[k-1]);\n            return;\n        }\n\n        if a[k-1] == a[k] {\n            println!(\"-1\");\n        } else {\n            println!(\"{}\", a[k-1]);\n        }\n\n    //}\n}\n\n/*\n\n\n*/\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "5052963af4c57db30abac8de2b25ff20", "src_uid": "55297e2a65144323af4d6abd6a6ef050", "difficulty": 1200}
  38. {"lang": "Rust", "source_code": "#[allow(dead_code)]\nuse std::cmp::min;\nuse std::collections::HashMap;\nuse std::io;\nuse std::str::FromStr;\nuse std::io::Read;\n\nstruct Input {\n  tokens: <std::vec::Vec<std::string::String> as IntoIterator>::IntoIter,\n  read_all: bool,\n}\n\nimpl Input {\n  pub fn new(read_all: bool) -> Input {\n    if read_all {\n      let mut all = String::new();\n      io::stdin().read_to_string(&mut all).unwrap();\n      let tokens: Vec<String> = all.split_whitespace().map(|s| s.to_string()).collect();\n      Input {\n        tokens: tokens.into_iter(),\n        read_all: true,\n      }\n    } else {\n      Input {\n        tokens: vec!().into_iter(),\n        read_all: false,\n      }\n    }\n  }\n\n  fn refresh_next_line(&mut self) {\n    if self.read_all {\n      panic!();\n    }\n    let mut buf = String::new();\n    io::stdin().read_line(&mut buf).unwrap();\n    let tokens: Vec<String> = buf.split_whitespace().map(|s| s.to_string()).collect();\n    self.tokens = tokens.into_iter();\n  }\n\n  fn next_impl(&mut self) -> String {\n    loop {\n      if let Some(next) = self.tokens.next() {\n        return next.to_string();\n      }\n      self.refresh_next_line();\n    }\n  }\n\n  pub fn next<T: FromStr>(&mut self) -> T where <T as std::str::FromStr>::Err: std::fmt::Debug {\n    let next_str = self.next_impl();\n    next_str.parse().unwrap()\n  }\n\n  pub fn next_vec<T: FromStr>(&mut self, len: usize) -> Vec<T> where <T as std::str::FromStr>::Err: std::fmt::Debug {\n    (0..len).map(|_i| self.next()).collect()\n  }\n\n  pub fn next_vec_read_len<T: FromStr>(&mut self) -> Vec<T> where <T as std::str::FromStr>::Err: std::fmt::Debug {\n    let len = self.next();\n    self.next_vec(len)\n  }\n}\n\nfn main() {\n  let mut input = Input::new(false);\n  let n: usize = input.next();\n  let k: usize = input.next();\n  let mut a: Vec<i32> = input.next_vec(n);\n  a.sort();\n  let answer;\n  if k == 0 {\n    answer = if a[0] == 1 { -1 } else { 1 };\n  } else if k == n {\n    answer = a[n - 1];\n  } else {\n    answer = if a[k - 1] == a[k] { -1 } else { a[k - 1] };\n  }\n  println!(\"{}\", answer);\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "11a816026e4c4e6807e9312cfceb08ab", "src_uid": "55297e2a65144323af4d6abd6a6ef050", "difficulty": 1200}
  39. {"lang": "Rust", "source_code": "struct Scan {\n    buffer: std::collections::VecDeque<String>,\n}\n\nimpl Scan {\n    fn new() -> Scan {\n        Scan {\n            buffer: std::collections::VecDeque::new(),\n        }\n    }\n\n    fn next<T: std::str::FromStr>(&mut self) -> T {\n        loop {\n            if let Some(token) = self.buffer.pop_front() {\n                break token.parse::<T>().ok().unwrap();\n            }\n            let mut line = String::new();\n            std::io::stdin().read_line(&mut line).expect(\"Fail to read\");\n            self.buffer = line.split_whitespace().map(String::from).collect();\n        }\n    }\n\n    fn next_n<T: std::str::FromStr>(&mut self, n: usize) -> Vec<T> {\n        (0..n).map(|_| self.next::<T>()).collect()\n    }\n}\n\nfn _main() {\n    let mut scan = Scan::new();\n    let n: usize = scan.next();\n    let k: usize = scan.next();\n    let mut arr: Vec<usize> = scan.next_n(n);\n    arr.sort();\n    if k == n {\n        println!(\"{}\", arr[n - 1]);\n        return;\n    }\n    if k == 0 {\n        if arr[0] == 1 {\n            println!(\"-1\");\n        } else {\n            println!(\"{}\", arr[0] - 1);\n        }\n        return;\n    }\n    if arr[k - 1] != arr[k] {\n        println!(\"{}\", arr[k - 1]);\n    } else {\n        println!(\"-1\");\n    }\n}\n\nfn main() {\n    std::thread::Builder::new()\n        .stack_size(1 << 23)\n        .spawn(_main)\n        .unwrap()\n        .join()\n        .unwrap();\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "a2ef8b0dcfd6c938d91621dc8e15c48f", "src_uid": "55297e2a65144323af4d6abd6a6ef050", "difficulty": 1200}
  40. {"lang": "Rust", "source_code": "macro_rules! parse_line {\n    ($t: ty) => ({\n        let mut a_str = String::new();\n        std::io::stdin().read_line(&mut a_str).expect(\"read error\");\n        let a_str = a_str.trim();\n        a_str.parse::<$t>().expect(\"parse error\")\n    });\n    ($($t: ty),+) => ({\n        let mut a_str = String::new();\n        std::io::stdin().read_line(&mut a_str).expect(\"read error\");\n        let mut a_iter = a_str.split_whitespace();\n        (\n            $(\n            a_iter.next().unwrap().parse::<$t>().expect(\"parse error\"),\n            )+\n        )\n    })\n}\n\n#[allow(unused_macros)]\nmacro_rules! parse_line_to_vec {\n    ($t: ty) => {{\n        let mut a_str = String::new();\n        std::io::stdin().read_line(&mut a_str).expect(\"read error\");\n        (a_str\n            .split_whitespace()\n            .map(|x| x.parse::<$t>().unwrap())\n            .collect::<Vec<$t>>())\n    }};\n}\n\nuse std::io::Write;\n\nfn solve(writer: &mut std::io::BufWriter<std::io::Stdout>) {\n    let (n, k) = parse_line!(usize, usize);\n    let mut a = parse_line_to_vec!(u32);\n    a.sort_unstable();\n    if k == 0 {\n        if a[0] == 1 {\n            writeln!(writer, \"-1\").unwrap();\n        }else{\n            writeln!(writer, \"1\").unwrap();\n        }\n        return;\n    }\n    if k == n {\n        writeln!(writer, \"{}\", a[n - 1]).unwrap();\n        return;\n    }\n    if a[k] == a[k - 1] {\n        writeln!(writer, \"-1\").unwrap();\n    }else{\n        writeln!(writer, \"{}\", a[k - 1]).unwrap();\n    }\n}\n\nfn main() {\n    let mut writer = std::io::BufWriter::new(std::io::stdout());\n    let tests = 1; // parse_line!(usize);\n    for _ in 0..tests {\n        solve(&mut writer);\n    }\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "3b6020650f103927fa767c410c92cc5b", "src_uid": "55297e2a65144323af4d6abd6a6ef050", "difficulty": 1200}
  41. {"lang": "Rust", "source_code": "use std::io::Read;\n\nfn input(read_file: bool) -> String {\n    if read_file {\n        let mut file = std::fs::File::open(\"sample.txt\").unwrap();\n        let mut buf = String::new();\n        file.read_to_string(&mut buf).unwrap();\n        buf\n    } else {\n        let mut buf = String::new();\n        std::io::stdin().read_to_string(&mut buf).unwrap();\n        buf.trim_end().to_owned()\n    }\n}\n\nfn solve(ws: &mut std::str::SplitWhitespace) {\n    let n: usize = ws.next().unwrap().parse().unwrap();\n    let k: usize = ws.next().unwrap().parse().unwrap();\n    let mut a = vec![0; n];\n    for i in 0..n {\n        a[i] = ws.next().unwrap().parse().unwrap();\n    }\n\n    a.sort();\n\n    let mut ans = -1;\n    if k == 0 {\n        if a[0] != 1 {\n            ans = 1;\n        }\n    } else {\n        ans = a[k - 1];\n        if k < n && a[k] == ans {\n            ans = -1;\n        }\n    }\n\n    println!(\"{}\", ans);\n}\n\nfn main() {\n    const READ_FROM_FILE: bool = false;\n\n    let s = input(READ_FROM_FILE);\n    let mut ws = s.split_whitespace();\n\n    solve(&mut ws);\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "256cf10a9bbbc3a17a5a8d550b3347e8", "src_uid": "55297e2a65144323af4d6abd6a6ef050", "difficulty": 1200}
  42. {"lang": "Rust", "source_code": "use std::io::*;\nuse std::str::FromStr;\n\nfn main() {\n    let stdin = stdin();\n    let mut sc = Scanner::new(stdin.lock());\n\n    let n = sc.next::<usize>();\n    let k = sc.next::<usize>();\n    let mut a = vec![0; n];\n    for i in 0..n {\n        a[i] = sc.next::<usize>();\n    }\n    a.sort();\n    if k != 0 && (k == n || a[k - 1] != a[k]) {\n        println!(\"{}\", a[k - 1]);\n    } else {\n        println!(\"-1\");\n    }\n}\n\npub struct Scanner<B> {\n    reader: B,\n    buffer: Vec<String>,\n}\n\nimpl<B: BufRead> Scanner<B> {\n    pub fn new(reader: B) -> Self {\n        Self {\n            reader,\n            buffer: Vec::new(),\n        }\n    }\n\n    pub fn next<T: FromStr>(&mut self) -> T\n    where\n        T::Err: ::std::fmt::Debug,\n    {\n        if let Some(front) = self.buffer.pop() {\n            front.parse::<T>().expect(&front)\n        } else {\n            let mut input = String::new();\n            self.reader.read_line(&mut input).expect(\"Line not read\");\n            self.buffer = input.split_whitespace().rev().map(String::from).collect();\n            self.next()\n        }\n    }\n}\n\n// pub trait BinarySearch<T> {\n//     fn lower_bound(&self, &T) -> usize;\n//     fn upper_bound(&self, &T) -> usize;\n// }\n\n// impl<T: Ord> BinarySearch<T> for [T] {\n//     fn lower_bound(&self, x: &T) -> usize {\n//         let mut low = 0;\n//         let mut high = self.len();\n\n//         while low != high {\n//             let mid = (low + high) / 2;\n//             match self[mid].cmp(x) {\n//                 std::cmp::Ordering::Less => {\n//                     low = mid + 1;\n//                 }\n//                 std::cmp::Ordering::Equal | std::cmp::Ordering::Greater => {\n//                     high = mid;\n//                 }\n//             }\n//         }\n//         low\n//     }\n\n//     fn upper_bound(&self, x: &T) -> usize {\n//         let mut low = 0;\n//         let mut high = self.len();\n\n//         while low != high {\n//             let mid = (low + high) / 2;\n//             match self[mid].cmp(x) {\n//                 std::cmp::Ordering::Less | std::cmp::Ordering::Equal => {\n//                     low = mid + 1;\n//                 }\n//                 std::cmp::Ordering::Greater => {\n//                     high = mid;\n//                 }\n//             }\n//         }\n//         low\n//     }\n// }\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "f66bb326c1ae519b1a043a4888e5ebd1", "src_uid": "55297e2a65144323af4d6abd6a6ef050", "difficulty": 1200}
  43. {"lang": "Rust", "source_code": "use std::io::*;\nuse std::str::FromStr;\n\nfn main() {\n    let stdin = stdin();\n    let mut sc = Scanner::new(stdin.lock());\n\n    let n = sc.next::<usize>();\n    let k = sc.next::<usize>();\n    let mut a = vec![0; n];\n    for i in 0..n {\n        a[i] = sc.next::<usize>();\n    }\n    a.sort();\n    if k == n || a[k - 1] != a[k] {\n        println!(\"{}\", a[k - 1]);\n    } else {\n        println!(\"-1\");\n    }\n}\n\npub struct Scanner<B> {\n    reader: B,\n    buffer: Vec<String>,\n}\n\nimpl<B: BufRead> Scanner<B> {\n    pub fn new(reader: B) -> Self {\n        Self {\n            reader,\n            buffer: Vec::new(),\n        }\n    }\n\n    pub fn next<T: FromStr>(&mut self) -> T\n    where\n        T::Err: ::std::fmt::Debug,\n    {\n        if let Some(front) = self.buffer.pop() {\n            front.parse::<T>().expect(&front)\n        } else {\n            let mut input = String::new();\n            self.reader.read_line(&mut input).expect(\"Line not read\");\n            self.buffer = input.split_whitespace().rev().map(String::from).collect();\n            self.next()\n        }\n    }\n}\n\n// pub trait BinarySearch<T> {\n//     fn lower_bound(&self, &T) -> usize;\n//     fn upper_bound(&self, &T) -> usize;\n// }\n\n// impl<T: Ord> BinarySearch<T> for [T] {\n//     fn lower_bound(&self, x: &T) -> usize {\n//         let mut low = 0;\n//         let mut high = self.len();\n\n//         while low != high {\n//             let mid = (low + high) / 2;\n//             match self[mid].cmp(x) {\n//                 std::cmp::Ordering::Less => {\n//                     low = mid + 1;\n//                 }\n//                 std::cmp::Ordering::Equal | std::cmp::Ordering::Greater => {\n//                     high = mid;\n//                 }\n//             }\n//         }\n//         low\n//     }\n\n//     fn upper_bound(&self, x: &T) -> usize {\n//         let mut low = 0;\n//         let mut high = self.len();\n\n//         while low != high {\n//             let mid = (low + high) / 2;\n//             match self[mid].cmp(x) {\n//                 std::cmp::Ordering::Less | std::cmp::Ordering::Equal => {\n//                     low = mid + 1;\n//                 }\n//                 std::cmp::Ordering::Greater => {\n//                     high = mid;\n//                 }\n//             }\n//         }\n//         low\n//     }\n// }\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "876834ab1c2fd5d6bcbf04c4024bb98f", "src_uid": "55297e2a65144323af4d6abd6a6ef050", "difficulty": 1200}
  44. {"lang": "Rust", "source_code": "use std::io::*;\nuse std::str::FromStr;\n\nfn main() {\n    let stdin = stdin();\n    let mut sc = Scanner::new(stdin.lock());\n\n    let n = sc.next::<usize>();\n    let k = sc.next::<usize>();\n    let mut a = vec![0; n];\n    for i in 0..n {\n        a[i] = sc.next::<usize>();\n    }\n    a.sort();\n    if k == 0 && 1 < a[0] {\n        println!(\"1\");\n    } else if k != 0 && (k == n || a[k - 1] != a[k]) {\n        println!(\"{}\", a[k - 1]);\n    } else {\n        println!(\"-1\");\n    }\n}\n\npub struct Scanner<B> {\n    reader: B,\n    buffer: Vec<String>,\n}\n\nimpl<B: BufRead> Scanner<B> {\n    pub fn new(reader: B) -> Self {\n        Self {\n            reader,\n            buffer: Vec::new(),\n        }\n    }\n\n    pub fn next<T: FromStr>(&mut self) -> T\n    where\n        T::Err: ::std::fmt::Debug,\n    {\n        if let Some(front) = self.buffer.pop() {\n            front.parse::<T>().expect(&front)\n        } else {\n            let mut input = String::new();\n            self.reader.read_line(&mut input).expect(\"Line not read\");\n            self.buffer = input.split_whitespace().rev().map(String::from).collect();\n            self.next()\n        }\n    }\n}\n\n// pub trait BinarySearch<T> {\n//     fn lower_bound(&self, &T) -> usize;\n//     fn upper_bound(&self, &T) -> usize;\n// }\n\n// impl<T: Ord> BinarySearch<T> for [T] {\n//     fn lower_bound(&self, x: &T) -> usize {\n//         let mut low = 0;\n//         let mut high = self.len();\n\n//         while low != high {\n//             let mid = (low + high) / 2;\n//             match self[mid].cmp(x) {\n//                 std::cmp::Ordering::Less => {\n//                     low = mid + 1;\n//                 }\n//                 std::cmp::Ordering::Equal | std::cmp::Ordering::Greater => {\n//                     high = mid;\n//                 }\n//             }\n//         }\n//         low\n//     }\n\n//     fn upper_bound(&self, x: &T) -> usize {\n//         let mut low = 0;\n//         let mut high = self.len();\n\n//         while low != high {\n//             let mid = (low + high) / 2;\n//             match self[mid].cmp(x) {\n//                 std::cmp::Ordering::Less | std::cmp::Ordering::Equal => {\n//                     low = mid + 1;\n//                 }\n//                 std::cmp::Ordering::Greater => {\n//                     high = mid;\n//                 }\n//             }\n//         }\n//         low\n//     }\n// }\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "08ecef2e461891ab2233d05d6921cc71", "src_uid": "55297e2a65144323af4d6abd6a6ef050", "difficulty": 1200}
  45. {"lang": "Rust", "source_code": "use std::collections::BinaryHeap;\nuse std::io;\nuse std::mem;\n\nconst DBG: bool = cfg!(mydebug);\n\nfn to_nums(line: &str) -> Vec<i64> {\n\tline.trim().split_whitespace()\n\t\t.map(|s| s.parse().unwrap())\n\t\t.collect()\n}\n\nconst M: i64 = 1000;\n\nfn doable(pwr: &[i64], num: &[i64], lim: i64) -> bool {\n\tif DBG { println!(\"======== lim {}\", lim); }\n\tlet n = pwr.len();\n\tlet quota: Vec<i64> = (0..n).map(|i| pwr[i] * M - num[i] * lim)\n\t\t.collect();\n\tif DBG {\n\t\tprint!(\"quota\");\n\t\tfor x in quota.iter() { print!(\" {}\", x); }\n\t\tprintln!();\n\t}\n\n\tlet mut total_quota = 0;\n\tlet mut free_pwr = BinaryHeap::new();\n\tlet mut candidates = Vec::new();\n\tfor i in 0..n {\n\t\tif quota[i] <= 0 {\n\t\t\ttotal_quota -= quota[i];\n\t\t\tfree_pwr.push(pwr[i]);\n\t\t\tif DBG { println!(\"free: quota {} pwr {}\",\n\t\t\t                  -quota[i], pwr[i]); }\n\t\t} else {\n\t\t\tcandidates.push((pwr[i], quota[i]));\n\t\t}\n\t}\n\tcandidates.sort();\n\n\tlet mut f0 = Vec::new();\n\tlet mut f1 = Vec::new();\n\tf1.push(total_quota);\n\twhile !candidates.is_empty() {\n\t\tif f1.is_empty() { return false }\n\t\tlet cur_pwr = candidates.last().unwrap().0;\n\t\tlet mut cur_quota = Vec::new();\n\t\twhile let Some(&(a_pwr, a_quota)) = candidates.last() {\n\t\t\tif a_pwr != cur_pwr { break }\n\t\t\tcandidates.pop();\n\t\t\tcur_quota.push(a_quota);\n\t\t}\n\t\tif DBG { println!(\"cur pwr {}, quota {:?}\", cur_pwr, cur_quota); }\n\t\tcur_quota.sort();\n\t\tlet mut prefixsum = vec![0];\n\t\tfor &cq in &cur_quota {\n\t\t\tlet s = prefixsum.last().unwrap() + cq;\n\t\t\tprefixsum.push(s);\n\t\t}\n\n\t\twhile let Some(&free) = free_pwr.peek() {\n\t\t\tif free <= cur_pwr { break }\n\t\t\tfree_pwr.pop();\n\t\t\tlet f10 = f1[0];\n\t\t\tf1.insert(0, f10);\n\t\t}\n\t\tif DBG { println!(\"prev config {:?}\", f1); }\n\t\tmem::swap(&mut f0, &mut f1);\n\t\tf1.clear();\n\t\tfor (k, &v0) in f0.iter().enumerate() {\n\t\t\tfor i in 0..prefixsum.len() {\n\t\t\t\tif v0 < 0 { continue }\n\t\t\t\tlet j = cur_quota.len() - i;\n\t\t\t\tif j > k { continue }\n\t\t\t\tlet t = k - j + i;\n\t\t\t\tif t >= f1.len() { f1.resize(t + 1, -1); }\n\t\t\t\tf1[t] = f1[t].max(v0 - prefixsum[i]);\n\t\t\t}\n\t\t}\n\t\twhile f1.last() == Some(&(-1)) { f1.pop(); }\n\t\tfor i in (1..f1.len()).rev() {\n\t\t\tf1[i - 1] = f1[i - 1].max(f1[i]);\n\t\t}\n\t\tif DBG { println!(\"cur config {:?}\", f1); }\n\t}\n\n\treturn true\n}\n\nfn main() -> io::Result<()> {\n\tlet f = io::stdin();\n\tlet mut line = String::new();\n\tf.read_line(&mut line)?;\n\tlet n: usize = line.trim().parse().unwrap();\n\tline.clear();\n\tf.read_line(&mut line)?;\n\tlet pwr = to_nums(&line);\n\tline.clear();\n\tf.read_line(&mut line)?;\n\tlet num = to_nums(&line);\n\tlet mut hi = 0;\n\tfor i in 0..n {\n\t\thi = hi.max((pwr[i] * M + num[i] - 1) / num[i]);\n\t}\n\tlet mut lo = 0;\n\twhile lo + 1 < hi {\n\t\tlet mid = (lo + hi) / 2;\n\t\tif doable(&pwr, &num, mid) {\n\t\t\thi = mid;\n\t\t} else {\n\t\t\tlo = mid;\n\t\t}\n\t}\n\tprintln!(\"{}\", hi);\n\n\tOk(())\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "7bba301b80eaba10fdbd43449c572ad8", "src_uid": "8883f8124092ace99ce0309fb8a511aa", "difficulty": 2500}
  46. {"lang": "Rust", "source_code": "use std::collections::BinaryHeap;\nuse std::io;\n\nconst DBG: bool = cfg!(mydebug);\n\nfn to_nums(line: &str) -> Vec<i64> {\n\tline.trim().split_whitespace()\n\t\t.map(|s| s.parse().unwrap())\n\t\t.collect()\n}\n\nconst M: i64 = 1000;\n\nfn doable(pwr: &[i64], num: &[i64], lim: i64) -> bool {\n\tif DBG { println!(\"======== lim {}\", lim); }\n\tlet n = pwr.len();\n\tlet quota: Vec<i64> = (0..n).map(|i| pwr[i] * M - num[i] * lim)\n\t\t.collect();\n\tif DBG {\n\t\tprint!(\"quota\");\n\t\tfor x in quota.iter() { print!(\" {}\", x); }\n\t\tprintln!();\n\t}\n\n\tlet mut total_quota = 0;\n\tlet mut free_pwr = BinaryHeap::new();\n\tlet mut candidates = Vec::new();\n\tfor i in 0..n {\n\t\tif quota[i] <= 0 {\n\t\t\ttotal_quota -= quota[i];\n\t\t\tfree_pwr.push(pwr[i]);\n\t\t\tif DBG { println!(\"free: quota {} pwr {}\",\n\t\t\t                  -quota[i], pwr[i]); }\n\t\t} else {\n\t\t\tcandidates.push((pwr[i], quota[i]));\n\t\t}\n\t}\n\tcandidates.sort();\n\n\tlet mut second_by_quota = BinaryHeap::new();\n\twhile let Some((a_pwr, a_quota)) = candidates.pop() {\n\t\tif DBG { println!(\"handling pwr {} quota {}\", a_pwr, a_quota); }\n\t\tif let Some(&free) = free_pwr.peek() {\n\t\t\tif free > a_pwr {\n\t\t\t\tif DBG { println!(\"as secondary of {}\", free); }\n\t\t\t\tfree_pwr.pop();\n\t\t\t\tsecond_by_quota.push((-a_quota, a_pwr));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\tsecond_by_quota.push((-a_quota, a_pwr));\n\t\tlet (neg_b_quota, b_pwr) = second_by_quota.pop().unwrap();\n\t\tlet b_quota = -neg_b_quota;\n\t\tif DBG { println!(\"instead, pwr {} quota {}\", b_pwr, b_quota); }\n\t\tif b_quota > total_quota { return false; }\n\t\ttotal_quota -= b_quota;\n\t\tfree_pwr.push(b_pwr);\n\t}\n\n\treturn true;\n}\n\nfn main() -> io::Result<()> {\n\tlet f = io::stdin();\n\tlet mut line = String::new();\n\tf.read_line(&mut line)?;\n\tlet n: usize = line.trim().parse().unwrap();\n\tline.clear();\n\tf.read_line(&mut line)?;\n\tlet pwr = to_nums(&line);\n\tline.clear();\n\tf.read_line(&mut line)?;\n\tlet num = to_nums(&line);\n\tlet mut hi = 0;\n\tfor i in 0..n {\n\t\thi = hi.max((pwr[i] * M + num[i] - 1) / num[i]);\n\t}\n\tlet mut lo = 0;\n\twhile lo + 1 < hi {\n\t\tlet mid = (lo + hi) / 2;\n\t\tif doable(&pwr, &num, mid) {\n\t\t\thi = mid;\n\t\t} else {\n\t\t\tlo = mid;\n\t\t}\n\t}\n\tprintln!(\"{}\", hi);\n\n\tOk(())\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "5ded5348d7a01f1f6193b10a563ab0bb", "src_uid": "8883f8124092ace99ce0309fb8a511aa", "difficulty": 2500}
  47. {"lang": "Rust", "source_code": "use std::collections::BinaryHeap;\nuse std::io;\nuse std::mem;\n\nconst DBG: bool = cfg!(mydebug);\n\nfn to_nums(line: &str) -> Vec<i64> {\n\tline.trim().split_whitespace()\n\t\t.map(|s| s.parse().unwrap())\n\t\t.collect()\n}\n\nconst M: i64 = 1000;\n\nfn doable(pwr: &[i64], num: &[i64], lim: i64) -> bool {\n\tif DBG { println!(\"======== lim {}\", lim); }\n\tlet n = pwr.len();\n\tlet quota: Vec<i64> = (0..n).map(|i| pwr[i] * M - num[i] * lim)\n\t\t.collect();\n\tif DBG {\n\t\tprint!(\"quota\");\n\t\tfor x in quota.iter() { print!(\" {}\", x); }\n\t\tprintln!();\n\t}\n\n\tlet mut total_quota = 0;\n\tlet mut free_pwr = BinaryHeap::new();\n\tlet mut candidates = Vec::new();\n\tfor i in 0..n {\n\t\tif quota[i] <= 0 {\n\t\t\ttotal_quota -= quota[i];\n\t\t\tfree_pwr.push(pwr[i]);\n\t\t\tif DBG { println!(\"free: quota {} pwr {}\",\n\t\t\t                  -quota[i], pwr[i]); }\n\t\t} else {\n\t\t\tcandidates.push((pwr[i], quota[i]));\n\t\t}\n\t}\n\tcandidates.sort();\n\n\tlet mut f0 = Vec::new();\n\tlet mut f1 = Vec::new();\n\tlet mut cur_quota = Vec::new();\n\tf1.push(total_quota);\n\twhile !candidates.is_empty() {\n\t\tlet cur_pwr = candidates.last().unwrap().0;\n\t\tcur_quota.clear();\n\t\twhile let Some(&(a_pwr, a_quota)) = candidates.last() {\n\t\t\tif a_pwr != cur_pwr { break }\n\t\t\tcandidates.pop();\n\t\t\tcur_quota.push(a_quota);\n\t\t}\n\t\tcur_quota.sort();\n\t\twhile let Some(&free) = free_pwr.peek() {\n\t\t\tif free <= cur_pwr { break }\n\t\t\tfree_pwr.pop();\n\t\t\tlet f10 = f1[0];\n\t\t\tf1.insert(0, f10);\n\t\t}\n\t\tmem::swap(&mut f0, &mut f1);\n\t\tf1.clear();\n\t\tf1.resize(f0.len() + cur_quota.len(), -1);\n\t\tfor (k, &v0) in f0.iter().enumerate() {\n\t\t\tlet mut prefixsum = 0;\n\t\t\tfor i in 0..(cur_quota.len() + 1) {\n\t\t\t\tif i != 0 { prefixsum += cur_quota[i - 1]; }\n\t\t\t\tif prefixsum > v0 { break }\n\t\t\t\tlet j = cur_quota.len() - i;\n\t\t\t\tif j > k { continue }\n\t\t\t\tlet t = k - j + i;\n\t\t\t\tf1[t] = f1[t].max(v0 - prefixsum);\n\t\t\t}\n\t\t}\n\t\twhile f1.last() == Some(&(-1)) { f1.pop(); }\n\t}\n\n\treturn !f1.is_empty();\n}\n\nfn main() -> io::Result<()> {\n\tlet f = io::stdin();\n\tlet mut line = String::new();\n\tf.read_line(&mut line)?;\n\tlet n: usize = line.trim().parse().unwrap();\n\tline.clear();\n\tf.read_line(&mut line)?;\n\tlet pwr = to_nums(&line);\n\tline.clear();\n\tf.read_line(&mut line)?;\n\tlet num = to_nums(&line);\n\tlet mut hi = 0;\n\tfor i in 0..n {\n\t\thi = hi.max((pwr[i] * M + num[i] - 1) / num[i]);\n\t}\n\tlet mut lo = 0;\n\twhile lo + 1 < hi {\n\t\tlet mid = (lo + hi) / 2;\n\t\tif doable(&pwr, &num, mid) {\n\t\t\thi = mid;\n\t\t} else {\n\t\t\tlo = mid;\n\t\t}\n\t}\n\tprintln!(\"{}\", hi);\n\n\tOk(())\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "0cd93444fe37d06aa6d712b575d4b769", "src_uid": "8883f8124092ace99ce0309fb8a511aa", "difficulty": 2500}
  48. {"lang": "Rust", "source_code": "use std::collections::BinaryHeap;\nuse std::io;\nuse std::mem;\n\nconst DBG: bool = cfg!(mydebug);\n\nfn to_nums(line: &str) -> Vec<i64> {\n\tline.trim().split_whitespace()\n\t\t.map(|s| s.parse().unwrap())\n\t\t.collect()\n}\n\nconst M: i64 = 1000;\n\nfn doable(pwr: &[i64], num: &[i64], lim: i64) -> bool {\n\tif DBG { println!(\"======== lim {}\", lim); }\n\tlet n = pwr.len();\n\tlet quota: Vec<i64> = (0..n).map(|i| pwr[i] * M - num[i] * lim)\n\t\t.collect();\n\tif DBG {\n\t\tprint!(\"quota\");\n\t\tfor x in quota.iter() { print!(\" {}\", x); }\n\t\tprintln!();\n\t}\n\n\tlet mut total_quota = 0;\n\tlet mut free_pwr = BinaryHeap::new();\n\tlet mut candidates = Vec::new();\n\tfor i in 0..n {\n\t\tif quota[i] <= 0 {\n\t\t\ttotal_quota -= quota[i];\n\t\t\tfree_pwr.push(pwr[i]);\n\t\t\tif DBG { println!(\"free: quota {} pwr {}\",\n\t\t\t                  -quota[i], pwr[i]); }\n\t\t} else {\n\t\t\tcandidates.push((pwr[i], quota[i]));\n\t\t}\n\t}\n\tcandidates.sort();\n\n\tlet mut f0 = Vec::new();\n\tlet mut f1 = Vec::new();\n\tf1.push(total_quota);\n\twhile !candidates.is_empty() {\n\t\tlet cur_pwr = candidates.last().unwrap().0;\n\t\tlet mut cur_quota = Vec::new();\n\t\twhile let Some(&(a_pwr, a_quota)) = candidates.last() {\n\t\t\tif a_pwr != cur_pwr { break }\n\t\t\tcandidates.pop();\n\t\t\tcur_quota.push(a_quota);\n\t\t}\n\t\tif DBG { println!(\"cur pwr {}, quota {:?}\", cur_pwr, cur_quota); }\n\t\tcur_quota.sort();\n\t\tlet mut prefixsum = vec![0];\n\t\tfor &cq in &cur_quota {\n\t\t\tlet s = prefixsum.last().unwrap() + cq;\n\t\t\tprefixsum.push(s);\n\t\t}\n\n\t\twhile let Some(&free) = free_pwr.peek() {\n\t\t\tif free <= cur_pwr { break }\n\t\t\tfree_pwr.pop();\n\t\t\tlet f10 = f1[0];\n\t\t\tf1.insert(0, f10);\n\t\t}\n\t\tif DBG { println!(\"prev config {:?}\", f1); }\n\t\tmem::swap(&mut f0, &mut f1);\n\t\tf1.clear();\n\t\tfor (k, &v0) in f0.iter().enumerate() {\n\t\t\tfor i in 0..prefixsum.len() {\n\t\t\t\tif v0 < 0 { continue }\n\t\t\t\tlet j = cur_quota.len() - i;\n\t\t\t\tif j > k { continue }\n\t\t\t\tlet t = k - j + i;\n\t\t\t\tif t >= f1.len() { f1.resize(t + 1, -1); }\n\t\t\t\tf1[t] = f1[t].max(v0 - prefixsum[i]);\n\t\t\t}\n\t\t}\n\t\twhile f1.last() == Some(&(-1)) { f1.pop(); }\n\t\tfor i in (1..f1.len()).rev() {\n\t\t\tf1[i - 1] = f1[i - 1].max(f1[i]);\n\t\t}\n\t\tif DBG { println!(\"cur config {:?}\", f1); }\n\t\tif f1.is_empty() { return false }\n\t}\n\n\treturn true\n}\n\nfn main() -> io::Result<()> {\n\tlet f = io::stdin();\n\tlet mut line = String::new();\n\tf.read_line(&mut line)?;\n\tlet n: usize = line.trim().parse().unwrap();\n\tline.clear();\n\tf.read_line(&mut line)?;\n\tlet pwr = to_nums(&line);\n\tline.clear();\n\tf.read_line(&mut line)?;\n\tlet num = to_nums(&line);\n\tlet mut hi = 0;\n\tfor i in 0..n {\n\t\thi = hi.max((pwr[i] * M + num[i] - 1) / num[i]);\n\t}\n\tlet mut lo = 0;\n\twhile lo + 1 < hi {\n\t\tlet mid = (lo + hi) / 2;\n\t\tif doable(&pwr, &num, mid) {\n\t\t\thi = mid;\n\t\t} else {\n\t\t\tlo = mid;\n\t\t}\n\t}\n\tprintln!(\"{}\", hi);\n\n\tOk(())\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "f375ad2b1360e3a6e611361d300ef545", "src_uid": "8883f8124092ace99ce0309fb8a511aa", "difficulty": 2500}
  49. {"lang": "Rust", "source_code": "// https://codeforces.com/contest/1137/problem/A\n//\n#![allow(unused_imports)]\nuse std::io::*;\nuse std::io::Write;\nuse std::fmt::*;\nuse std::str::*;\nuse std::cmp::*;\nuse std::collections::*;\n\n#[allow(unused_macros)]\nmacro_rules! input {\n    (source = $s:expr, $($r:tt)*) => {\n        let mut iter = $s.split_whitespace();\n        input_inner!{iter, $($r)*}\n    };\n    ($($r:tt)*) => {\n        let s = {\n            use std::io::Read;\n            let mut s = String::new();\n            std::io::stdin().read_to_string(&mut s).unwrap();\n            s\n        };\n        let mut iter = s.split_whitespace();\n        input_inner!{iter, $($r)*}\n    };\n}\n\n#[allow(unused_macros)]\nmacro_rules! input_inner {\n    ($iter:expr) => {};\n    ($iter:expr, ) => {};\n\n    ($iter:expr, $var:ident : $t:tt $($r:tt)*) => {\n        let $var = read_value!($iter, $t);\n        input_inner!{$iter $($r)*}\n    };\n\n    ($iter:expr, mut $var:ident : $t:tt $($r:tt)*) => {\n        let mut $var = read_value!($iter, $t);\n        input_inner!{$iter $($r)*}\n    };\n}\n\n#[allow(unused_macros)]\nmacro_rules! read_value {\n    ($iter:expr, ( $($t:tt),* )) => {\n        ( $(read_value!($iter, $t)),* )\n    };\n\n    ($iter:expr, [ $t:tt ; $len:expr ]) => {\n        (0..$len).map(|_| read_value!($iter, $t)).collect::<Vec<_>>()\n    };\n\n    ($iter:expr, [ next / $t:tt ]) => {\n        {\n            let len = read_value!($iter, usize);\n            (0..len).map(|_| read_value!($iter, $t)).collect::<Vec<_>>()\n        }\n    };\n\n    ($iter:expr, switch) => {\n        {\n            let ty = read_value!($iter, i32);\n            if ty == 1 {\n                vec![ty, read_value!($iter, i32), read_value!($iter, i32)]\n            } else if ty == 2 {\n                vec![ty, read_value!($iter, i32)]\n            } else {\n                vec![ty, read_value!($iter, i32)]\n            }\n        }\n    };\n\n    ($iter:expr, chars) => {\n        read_value!($iter, String).chars().collect::<Vec<char>>()\n    };\n\n    ($iter:expr, usize1) => {\n        read_value!($iter, usize) - 1\n    };\n\n    ($iter:expr, $t:ty) => {\n        $iter.next().unwrap().parse::<$t>().expect(\"Parse error\")\n    };\n}\n\n#[allow(unused_macros)]\nmacro_rules! dvec {\n    ($t:expr ; $len:expr) => {\n        vec![$t; $len]\n    };\n\n    ($t:expr ; $len:expr, $($rest:expr),*) => {\n        vec![dvec!($t; $($rest),*); $len]\n    };\n}\n\n#[allow(unused_macros)]\nmacro_rules! ifv {\n    ($t:expr, $a:expr, $b: expr) => {\n        if $t { $a } else { $b }\n    }\n}\n\n#[allow(unused_macros)]\nmacro_rules! fill {\n    ($t:expr, $v:expr) => {\n        for i in 0..$t.len() {\n            $t[i] = $v;\n        }\n    };\n}\n\n#[allow(unused_macros)]\nmacro_rules! join {\n    ($t:expr, $glue:expr) => {\n        $t.into_iter().map(|w| w.to_string()).collect::<Vec<_>>().join($glue)\n    };\n}\n\n#[allow(unused_macros)]\nmacro_rules! debug {\n    ($($a:expr),*) => {\n        println!(concat!($(stringify!($a), \" = {:?}, \"),*), $($a),*);\n    }\n}\n\n\n\nfn process(a: Vec<i32>) -> (Vec<i32>, i32) {\n    let mut ua = a.clone();\n    ua.sort();\n    ua.dedup();\n\n    let n = a.len();\n    let mut r = vec![0; n];\n    for i in 0..n {\n        r[i] = ua.binary_search(&a[i]).unwrap() as i32;\n    }\n    (r, ua.len() as i32)\n}\n\nfn main() {\n    input! {\n        n: usize, m: usize,\n        a: [[i32; m]; n]\n    };\n\n    let mut rows = vec![];\n    for i in 0..n {\n        rows.push(process(a[i].clone()));\n    }\n    let mut cols = vec![];\n    for j in 0..m {\n        let mut ca = vec![0; n];\n        for i in 0..n {\n            ca[i] = a[i][j];\n        }\n        cols.push(process(ca));\n    }\n\n    let mut ans = vec![vec![0; m]; n];\n    for i in 0..n {\n        for j in 0..m {\n            let mut best = (n+m) as i32;\n\n            let mut myc = cols[j].0[i];\n            let mut myr = rows[i].0[j];\n            let mut col_count = cols[j].1;\n            let mut row_count = rows[i].1;\n            ans[i][j] = 1 + max(myc, myr) + max(col_count-myc-1, row_count-myr-1);\n        }\n    }\n\n    let out = stdout();\n    let mut out = BufWriter::new(out.lock());\n    for i in 0..n {\n        writeln!(out, \"{}\", join!(ans[i].clone(), \" \"));\n    }\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "96dd108760a1d4073bc7e8bbc909fabe", "src_uid": "206861107f0c06d3c8e358a85b9ddd7f", "difficulty": 1600}
  50. {"lang": "Rust", "source_code": "#![allow(unused_imports)]\n\nuse std::cmp::*;\nuse std::collections::*;\nuse std::fmt::Debug;\nuse std::str::FromStr;\n\nfn main() {\n    let nn = read_vec::<usize>();\n    let (n, m) = (nn[0], nn[1]);\n\n    #[derive(Copy, Clone, Debug)]\n    struct Point {\n        i: usize,\n        h: i64,\n        fh: i64,\n    }\n\n    let mut rows = vec![Vec::with_capacity(m); n];\n    let mut columns = vec![Vec::with_capacity(n); m];\n    let mut r_maxes = vec![0; n];\n    let mut c_maxes = vec![0; m];\n\n    for i in 0..n {\n        let p = read_vec::<i64>();\n        for j in 0..m {\n            rows[i].push(Point {\n                i: j,\n                h: p[j],\n                fh: 0,\n            });\n            columns[j].push(Point {\n                i: i,\n                h: p[j],\n                fh: 0,\n            });\n        }\n    }\n\n    for i in 0..n {\n        let row = &mut rows[i];\n        row.sort_unstable_by(\n            |a, b| a.h.cmp(&b.h)\n        );\n        row[0].fh = 1;\n        for i in 1..m {\n            if row[i].h == row[i - 1].h {\n                row[i].fh = row[i - 1].fh;\n            } else {\n                row[i].fh = row[i - 1].fh + 1;\n            }\n        }\n        r_maxes[i] = row[m - 1].fh;\n        row.sort_unstable_by(\n            |a, b| a.i.cmp(&b.i)\n        );\n    }\n\n    for i in 0..m {\n        let row = &mut columns[i];\n        row.sort_unstable_by(\n            |a, b| a.h.cmp(&b.h)\n        );\n        row[0].fh = 1;\n        for i in 1..n {\n            if row[i].h == row[i - 1].h {\n                row[i].fh = row[i - 1].fh;\n            } else {\n                row[i].fh = row[i - 1].fh + 1;\n            }\n        }\n        c_maxes[i] = row[n - 1].fh;\n        row.sort_unstable_by(\n            |a, b| a.i.cmp(&b.i)\n        );\n    }\n\n//    for i in 0..n { print_vec(&rows[i]) }\n//    for i in 0..m { print_vec(&columns[i]) }\n\n    for i in 0..n {\n        for j in 0..m {\n            print!(\"{}\", max(\n                r_maxes[i] + max(0, columns[j][i].fh - rows[i][j].fh),\n                c_maxes[j] + max(0, -columns[j][i].fh + rows[i][j].fh),\n            ));\n            if j < m - 1 {\n                print! {\" \"};\n            }\n        }\n        println!()\n    }\n}\n\n#[allow(dead_code)]\nconst DIV: i64 = 1_000_000_007;\n#[allow(dead_code)]\nconst N: usize = 200000;\n#[allow(dead_code)]\nconst CHARS: usize = 'z' as usize - 'a' as usize + 1;\n\n#[allow(dead_code)]\nfn print_vec<T: Debug>(a: &Vec<T>) {\n    for i in 0..a.len() {\n        if i != 0 {\n            print!(\" \");\n        }\n        print!(\"{:?}\", a[i]);\n    }\n    println!();\n}\n\n#[allow(dead_code)]\nfn read_line() -> String {\n    let mut s = String::with_capacity(N);\n    std::io::stdin().read_line(&mut s).unwrap();\n    s\n}\n\n#[allow(dead_code)]\nfn read_vec<T: FromStr>() -> Vec<T>\n    where T::Err: Debug\n{\n    return read_line()\n        .split_whitespace()\n        .map(|x| x.parse().unwrap())\n        .collect();\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "0bb5a08528b3b09ea20bc5a60b176c6b", "src_uid": "206861107f0c06d3c8e358a85b9ddd7f", "difficulty": 1600}
  51. {"lang": "Rust", "source_code": "#![allow(unused_imports)]\n\nuse std::cmp::*;\nuse std::collections::*;\nuse std::fmt::Debug;\nuse std::str::FromStr;\n\nfn main() {\n    let nn = read_vec::<usize>();\n    let (n, m) = (nn[0], nn[1]);\n\n    #[derive(Copy, Clone)]\n    struct Point {\n        i: usize,\n        h: i64,\n    }\n\n    let mut rows = vec![Vec::with_capacity(m); n];\n    let mut columns = vec![Vec::with_capacity(n); m];\n    let mut r_maxes = vec![0; n];\n    let mut c_maxes = vec![0; m];\n\n    for i in 0..n {\n        let p = read_vec::<i64>();\n        for j in 0..m {\n            rows[i].push(Point {\n                i: j,\n                h: p[j],\n            });\n            columns[j].push(Point {\n                i: i,\n                h: p[j],\n            });\n        }\n    }\n\n    for i in 0..n {\n        let row = &mut rows[i];\n        row.sort_unstable_by(\n            |a, b| a.h.cmp(&b.h)\n        );\n        row[0].h = 1;\n        for i in 1..n {\n            if row[i].h == row[i - 1].h {\n                row[i].h = row[i - 1].h;\n            } else {\n                row[i].h = row[i - 1].h + 1;\n            }\n        }\n        r_maxes[i] = row[m - 1].h;\n        row.sort_unstable_by(\n            |a, b| a.i.cmp(&b.i)\n        );\n    }\n\n    for i in 0..m {\n        let row = &mut columns[i];\n        row.sort_unstable_by(\n            |a, b| a.h.cmp(&b.h)\n        );\n        row[0].h = 1;\n        for i in 1..n {\n            if row[i].h == row[i - 1].h {\n                row[i].h = row[i - 1].h;\n            } else {\n                row[i].h = row[i - 1].h + 1;\n            }\n        }\n        c_maxes[i] = row[n - 1].h;\n        row.sort_unstable_by(\n            |a, b| a.i.cmp(&b.i)\n        );\n    }\n\n    for i in 0..n {\n        for j in 0..m {\n            print!(\"{}\", max(\n                r_maxes[i] + max(0, columns[j][i].h - rows[i][j].h),\n                c_maxes[i] + max(0, -columns[j][i].h + rows[i][j].h),\n            ));\n            if j < m - 1 {\n                print! {\" \"};\n            }\n        }\n        println!()\n    }\n}\n\n#[allow(dead_code)]\nconst DIV: i64 = 1_000_000_007;\n#[allow(dead_code)]\nconst N: usize = 200000;\n#[allow(dead_code)]\nconst CHARS: usize = 'z' as usize - 'a' as usize + 1;\n\n#[allow(dead_code)]\nfn print_vec<T: Debug>(a: &Vec<T>) {\n    for i in 0..a.len() {\n        if i != 0 {\n            print!(\" \");\n        }\n        print!(\"{:?}\", a[i]);\n    }\n    println!();\n}\n\n#[allow(dead_code)]\nfn read_line() -> String {\n    let mut s = String::with_capacity(N);\n    std::io::stdin().read_line(&mut s).unwrap();\n    s\n}\n\n#[allow(dead_code)]\nfn read_vec<T: FromStr>() -> Vec<T>\n    where T::Err: Debug\n{\n    return read_line()\n        .split_whitespace()\n        .map(|x| x.parse().unwrap())\n        .collect();\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "fe5f20b1f3c53f4ff40179bdf846a1e6", "src_uid": "206861107f0c06d3c8e358a85b9ddd7f", "difficulty": 1600}
  52. {"lang": "Rust", "source_code": "#![allow(unused_imports)]\n\nuse std::cmp::*;\nuse std::collections::*;\nuse std::fmt::Debug;\nuse std::str::FromStr;\n\nfn main() {\n    let nn = read_vec::<usize>();\n    let (n, m) = (nn[0], nn[1]);\n\n    #[derive(Copy, Clone, Debug)]\n    struct Point {\n        i: usize,\n        h: i64,\n        fh: i64,\n    }\n\n    let mut rows = vec![Vec::with_capacity(m); n];\n    let mut columns = vec![Vec::with_capacity(n); m];\n    let mut r_maxes = vec![0; n];\n    let mut c_maxes = vec![0; m];\n\n    for i in 0..n {\n        let p = read_vec::<i64>();\n        for j in 0..m {\n            rows[i].push(Point {\n                i: j,\n                h: p[j],\n                fh: 0,\n            });\n            columns[j].push(Point {\n                i: i,\n                h: p[j],\n                fh: 0,\n            });\n        }\n    }\n\n    for i in 0..n {\n        let row = &mut rows[i];\n        row.sort_unstable_by(\n            |a, b| a.h.cmp(&b.h)\n        );\n        row[0].fh = 1;\n        for i in 1..m {\n            if row[i].h == row[i - 1].h {\n                row[i].fh = row[i - 1].fh;\n            } else {\n                row[i].fh = row[i - 1].fh + 1;\n            }\n        }\n        r_maxes[i] = row[m - 1].h;\n        row.sort_unstable_by(\n            |a, b| a.i.cmp(&b.i)\n        );\n    }\n\n    for i in 0..m {\n        let row = &mut columns[i];\n        row.sort_unstable_by(\n            |a, b| a.h.cmp(&b.h)\n        );\n        row[0].fh = 1;\n        for i in 1..n {\n            if row[i].h == row[i - 1].h {\n                row[i].fh = row[i - 1].fh;\n            } else {\n                row[i].fh = row[i - 1].fh + 1;\n            }\n        }\n        c_maxes[i] = row[n - 1].h;\n        row.sort_unstable_by(\n            |a, b| a.i.cmp(&b.i)\n        );\n    }\n\n//    for i in 0..n { print_vec(&rows[i]) }\n//    for i in 0..m { print_vec(&columns[i]) }\n\n    for i in 0..n {\n        for j in 0..m {\n            print!(\"{}\", max(\n                r_maxes[i] + max(0, columns[j][i].h - rows[i][j].h),\n                c_maxes[j] + max(0, -columns[j][i].h + rows[i][j].h),\n            ));\n            if j < m - 1 {\n                print! {\" \"};\n            }\n        }\n        println!()\n    }\n}\n\n#[allow(dead_code)]\nconst DIV: i64 = 1_000_000_007;\n#[allow(dead_code)]\nconst N: usize = 200000;\n#[allow(dead_code)]\nconst CHARS: usize = 'z' as usize - 'a' as usize + 1;\n\n#[allow(dead_code)]\nfn print_vec<T: Debug>(a: &Vec<T>) {\n    for i in 0..a.len() {\n        if i != 0 {\n            print!(\" \");\n        }\n        print!(\"{:?}\", a[i]);\n    }\n    println!();\n}\n\n#[allow(dead_code)]\nfn read_line() -> String {\n    let mut s = String::with_capacity(N);\n    std::io::stdin().read_line(&mut s).unwrap();\n    s\n}\n\n#[allow(dead_code)]\nfn read_vec<T: FromStr>() -> Vec<T>\n    where T::Err: Debug\n{\n    return read_line()\n        .split_whitespace()\n        .map(|x| x.parse().unwrap())\n        .collect();\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "a712d3e9b760a08959b7a829b60ecc14", "src_uid": "206861107f0c06d3c8e358a85b9ddd7f", "difficulty": 1600}
  53. {"lang": "Rust", "source_code": "#![allow(unused_imports)]\n\nuse std::cmp::*;\nuse std::collections::*;\nuse std::fmt::Debug;\nuse std::str::FromStr;\n\nfn main() {\n    let nn = read_vec::<usize>();\n    let (n, m) = (nn[0], nn[1]);\n\n    #[derive(Copy, Clone)]\n    struct Point {\n        i: usize,\n        h: i64,\n    }\n\n    let mut rows = vec![Vec::with_capacity(m); n];\n    let mut columns = vec![Vec::with_capacity(n); m];\n    let mut r_maxes = vec![0; n];\n    let mut c_maxes = vec![0; m];\n\n    for i in 0..n {\n        let p = read_vec::<i64>();\n        for j in 0..m {\n            rows[i].push(Point {\n                i: j,\n                h: p[j],\n            });\n            columns[j].push(Point {\n                i: i,\n                h: p[j],\n            });\n        }\n    }\n\n    for i in 0..n {\n        let row = &mut rows[i];\n        row.sort_unstable_by(\n            |a, b| a.h.cmp(&b.h)\n        );\n        row[0].h = 1;\n        for i in 1..m {\n            if row[i].h == row[i - 1].h {\n                row[i].h = row[i - 1].h;\n            } else {\n                row[i].h = row[i - 1].h + 1;\n            }\n        }\n        r_maxes[i] = row[m - 1].h;\n        row.sort_unstable_by(\n            |a, b| a.i.cmp(&b.i)\n        );\n    }\n\n    for i in 0..m {\n        let row = &mut columns[i];\n        row.sort_unstable_by(\n            |a, b| a.h.cmp(&b.h)\n        );\n        row[0].h = 1;\n        for i in 1..n {\n            if row[i].h == row[i - 1].h {\n                row[i].h = row[i - 1].h;\n            } else {\n                row[i].h = row[i - 1].h + 1;\n            }\n        }\n        c_maxes[i] = row[n - 1].h;\n        row.sort_unstable_by(\n            |a, b| a.i.cmp(&b.i)\n        );\n    }\n\n    for i in 0..n {\n        for j in 0..m {\n            print!(\"{}\", max(\n                r_maxes[i] + max(0, columns[j][i].h - rows[i][j].h),\n                c_maxes[j] + max(0, -columns[j][i].h + rows[i][j].h),\n            ));\n            if j < m - 1 {\n                print! {\" \"};\n            }\n        }\n        println!()\n    }\n}\n\n#[allow(dead_code)]\nconst DIV: i64 = 1_000_000_007;\n#[allow(dead_code)]\nconst N: usize = 200000;\n#[allow(dead_code)]\nconst CHARS: usize = 'z' as usize - 'a' as usize + 1;\n\n#[allow(dead_code)]\nfn print_vec<T: Debug>(a: &Vec<T>) {\n    for i in 0..a.len() {\n        if i != 0 {\n            print!(\" \");\n        }\n        print!(\"{:?}\", a[i]);\n    }\n    println!();\n}\n\n#[allow(dead_code)]\nfn read_line() -> String {\n    let mut s = String::with_capacity(N);\n    std::io::stdin().read_line(&mut s).unwrap();\n    s\n}\n\n#[allow(dead_code)]\nfn read_vec<T: FromStr>() -> Vec<T>\n    where T::Err: Debug\n{\n    return read_line()\n        .split_whitespace()\n        .map(|x| x.parse().unwrap())\n        .collect();\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "6797d6df9bed2fe804ad57b31aa3410b", "src_uid": "206861107f0c06d3c8e358a85b9ddd7f", "difficulty": 1600}
  54. {"lang": "Rust", "source_code": "use std::io::BufRead;\n\n#[derive(Clone,Debug)]\nstruct Problem {\n    input: Vec<u32>,\n}\n\nfn read_problem<R: BufRead>(br: R) -> Problem {\n    let mut lines = br.lines().map(Result::unwrap);\n\n    let ct = str::parse(&lines.next().unwrap()).unwrap();\n    let input = lines.next().unwrap().split_whitespace()\n        .map(|w| str::parse::<u32>(w).unwrap())\n        .map(|n| n - 1)\n        .collect::<Vec<_>>();\n    assert!(lines.next().is_none());\n    assert!(input.len() == ct);\n    Problem { input: input }\n}\n\nfn solve(problem: Problem) -> Vec<u32> {\n    let mut best = problem.input.iter().map(|_| u32::max_value()).collect::<Vec<_>>();\n    let mut next = vec![0];\n    let mut cost = 0;\n    while !next.is_empty() {\n        for n in std::mem::replace(&mut next, Vec::new()) {\n            if cost < best[n] {\n                best[n] = cost;\n                if n > 0 {\n                    next.push(n-1);\n                }\n                if n+1 < best.len() {\n                    next.push(n+1);\n                }\n                next.push(problem.input[n] as usize);\n            }\n        }\n        cost += 1;\n    }\n    best\n}\n\nfn main() {\n    let stdin = std::io::stdin();\n    let p = read_problem(stdin.lock());\n    for k in solve(p) {\n        print!(\"{} \", k);\n    }\n    println!(\"\");\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "579057b098ba75c0b97d8e8eb337f332", "src_uid": "d465aec304757dff34a770f7877dd940", "difficulty": 1600}
  55. {"lang": "Rust", "source_code": "use std::io::BufRead;\n\n#[derive(Clone,Debug)]\nstruct Problem {\n    input: Vec<u32>,\n}\n\nfn read_problem<R: BufRead>(br: R) -> Problem {\n    let mut lines = br.lines().map(Result::unwrap);\n\n    let ct = str::parse(&lines.next().unwrap()).unwrap();\n    let input = lines.next().unwrap().split_whitespace()\n        .map(|w| str::parse::<u32>(w).unwrap())\n        .map(|n| n - 1)\n        .collect::<Vec<_>>();\n    assert!(lines.next().is_none());\n    assert!(input.len() == ct);\n    Problem { input: input }\n}\n\nfn solve(problem: Problem) -> Vec<u32> {\n    let mut best = problem.input.iter().map(|_| u32::max_value()).collect::<Vec<_>>();\n    let mut next = 0;\n    for (i, ai) in problem.input.into_iter().enumerate() {\n        if next < best[i] {\n            best[i] = next;\n        }\n        next = best[i] + 1;\n        if next < best[ai as usize] {\n            best[ai as usize] = next;\n        }\n    }\n    best\n}\n\nfn main() {\n    let stdin = std::io::stdin();\n    let p = read_problem(stdin.lock());\n    for k in solve(p) {\n        print!(\"{} \", k);\n    }\n    println!(\"\");\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "a3c0a4532d6a2ccd612ec071dc470718", "src_uid": "d465aec304757dff34a770f7877dd940", "difficulty": 1600}
  56. {"lang": "Rust", "source_code": "use std::io;\nuse std::io::Read;\nuse std::collections::VecDeque;\n\n\nfn main() {\n    let mut text = String::new();\n    io::stdin().read_to_string(&mut text).unwrap();\n    let mut iter = text.split_whitespace().map(|x| x.parse::<usize>().unwrap());\n    let n = iter.next().unwrap();\n    let a = iter.map(|x| x - 1).collect::<Vec<usize>>();\n    let mut energy = vec![-1; n];\n    energy[0] = 0;\n    let mut queue = VecDeque::new();\n    queue.push_back(0);\n    while let Some(cur) = queue.pop_front() {\n        if cur > 0 && energy[cur - 1] == -1 {\n            energy[cur - 1] = energy[cur] + 1;\n            queue.push_back(cur - 1);\n        }\n        if cur < n - 1 && energy[cur + 1] == -1 {\n            energy[cur + 1] = energy[cur] + 1;\n            queue.push_back(cur + 1);\n        }\n        if energy[a[cur]] == -1 {\n            energy[a[cur]] = energy[cur] + 1;\n            queue.push_back(a[cur]);\n        }\n    }\n    for item in energy {\n        print!(\"{} \", item);\n    }\n    println!(\"\");\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "d6d94c995e414ed45df1b742512f6d2b", "src_uid": "d465aec304757dff34a770f7877dd940", "difficulty": 1600}
  57. {"lang": "Rust", "source_code": "use std::fmt::Debug;\nuse std::str::FromStr;\n\npub struct TokenReader {\n    reader: std::io::Stdin,\n    tokens: Vec<String>,\n    index: usize,\n}\n\nimpl TokenReader {\n    pub fn new() -> Self {\n        Self {\n            reader: std::io::stdin(),\n            tokens: Vec::new(),\n            index: 0,\n        }\n    }\n\n    pub fn next<T>(&mut self) -> T\n    where\n        T: FromStr,\n        T::Err: Debug,\n    {\n        if self.index >= self.tokens.len() {\n            self.load_next_line();\n        }\n        self.index += 1;\n        self.tokens[self.index - 1].parse().unwrap()\n    }\n\n    pub fn vector<T>(&mut self) -> Vec<T>\n    where\n        T: FromStr,\n        T::Err: Debug,\n    {\n        if self.index >= self.tokens.len() {\n            self.load_next_line();\n        }\n        self.index = self.tokens.len();\n        self.tokens.iter().map(|tok| tok.parse().unwrap()).collect()\n    }\n\n    pub fn load_next_line(&mut self) {\n        let mut line = String::new();\n        self.reader.read_line(&mut line).unwrap();\n\n        self.tokens = line\n            .split_whitespace()\n            .map(String::from)\n            .collect();\n        self.index = 0;\n    }\n}\n\nfn eat1(n: &mut i64, v: &mut i64, c: &mut i64) -> i64 {\n    let eaten = std::cmp::min(*n, (*v - *c).abs());\n    *n -= eaten;\n\n    if *v > *c {\n        *v -= eaten;\n    } else {\n        *c -= eaten;\n    }\n\n    eaten\n}\n\nfn eat2(m: &mut i64, v: &mut i64, c: &mut i64) -> i64 {\n    let eaten = std::cmp::min(*m, std::cmp::min(*v, *c));\n    *m -= eaten;\n\n    if *v > *c {\n        *c -= eaten;\n    } else {\n        *v -= eaten;\n    }\n\n    eaten\n}\n\nfn possible(mut v: i64, mut c: i64, mut n: i64, mut m: i64) -> bool {\n    if n + m > v + c {\n        return false;\n    }\n\n    while v != c && n > 0 {\n        if eat1(&mut n, &mut v, &mut c) == 0 {\n            return false;\n        }\n    }\n\n    while n > 0 && m > 0 {\n        let eaten = std::cmp::min(std::cmp::min(v, m), std::cmp::min(c, n));\n        if eaten == 0 {\n            break;\n        }\n\n        v -= eaten;\n        c -= eaten;\n        n -= eaten;\n        m -= eaten;\n    }\n\n    while n > 0 {\n        if eat1(&mut n, &mut v, &mut c) == 0 {\n            return false;\n        }\n    }\n    while m > 0 {\n        if eat2(&mut m, &mut v, &mut c) == 0 {\n            return false;\n        }\n    }\n\n    n == 0 && m == 0\n}\n\nfn main() {\n    let mut reader = TokenReader::new();\n    let tests = reader.next();\n\n    for _ in 0..tests {\n        let v = reader.next();\n        let c = reader.next();\n        let n = reader.next();\n        let m = reader.next();\n        println!(\"{}\", if possible(v, c, n, m) { \"Yes\" } else { \"No\" });\n    }\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "bf9f939c68fa657eda8e1bc83b99770b", "src_uid": "0f960d19e576b7421a7c7a7166a884ea", "difficulty": 1300}
  58. {"lang": "Rust", "source_code": "#![allow(dead_code)]\n#![allow(unused_imports)]\n\nuse std::cmp::*;\nuse std::collections::*;\nuse std::io;\nuse std::ops;\nuse std::str::FromStr;\n\n#[derive(Clone, Debug, Default)]\nstruct ProblemState {\n}\n\nimpl Problem {\n    fn solve(&mut self) {\n        let mut a: u64 = self.scan();\n        let mut b: u64 = self.scan();\n        let mut n: u64 = self.scan();\n        let mut m: u64 = self.scan();\n\n        if a < b {\n            let t = a; a = b; b = t;\n        }\n\n        let x = 2 * b - min(m, b);\n\n        n -= min(n, a - b);\n        m -= min(m, b);\n        n -= min(n, x);\n\n        if n == 0 && m == 0 {\n            println!(\"Yes\");\n        } else {\n            println!(\"No\");\n        }\n    }\n}\n\nfn main() {\n    Problem::new().solve_cases();\n}\n\nstruct Problem {\n    input_state: InputState,\n    problem_state: ProblemState,\n}\n\nstruct InputState {\n    stdin: io::Stdin,\n    buffer: String,\n    tokens: VecDeque<String>,\n}\n\nimpl Problem {\n    fn new() -> Self {\n        Self {\n            input_state: InputState {\n                stdin: io::stdin(),\n                buffer: String::new(),\n                tokens: VecDeque::new(),\n            },\n            problem_state: Default::default(),\n        }\n    }\n\n    fn solve_cases(&mut self) {\n        for _ in 0usize..self.scan() {\n            self.solve()\n        }\n    }\n\n    fn scan<T: FromStr>(&mut self) -> T {\n        while self.input_state.tokens.is_empty() {\n            self.input_state.stdin.read_line(&mut self.input_state.buffer).unwrap();\n\n            for token in self.input_state.buffer.split_ascii_whitespace() {\n                self.input_state.tokens.push_back(token.to_string());\n            }\n\n            self.input_state.buffer.clear();\n        }\n\n        self.input_state.tokens.pop_front().unwrap().parse().ok().unwrap()\n    }\n\n    fn scan_vec<T: FromStr>(&mut self, n: usize) -> Vec<T> {\n        (0..n).into_iter().map(|_| self.scan()).collect()\n    }\n\n    fn scan_line(&mut self) -> String {\n        let mut line = String::new();\n        self.input_state.stdin.read_line(&mut line).unwrap();\n        while line.ends_with('\\n') || line.ends_with('\\r') { line.pop(); }\n        line\n    }\n\n    fn scan_line_vec(&mut self, n: usize) -> Vec<String> {\n        (0..n).into_iter().map(|_| self.scan_line()).collect()\n    }\n}\n\nimpl ops::Deref for Problem {\n    type Target = ProblemState;\n\n    fn deref(&self) -> &ProblemState {\n        &self.problem_state\n    }\n}\n\nimpl ops::DerefMut for Problem {\n    fn deref_mut(&mut self) -> &mut ProblemState {\n        &mut self.problem_state\n    }\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "4db868163bed32ad8f6f1cc6e182489e", "src_uid": "0f960d19e576b7421a7c7a7166a884ea", "difficulty": 1300}
  59. {"lang": "Rust", "source_code": "#![allow(dead_code)]\n#![allow(unused_imports)]\n\nuse std::cmp::*;\nuse std::collections::*;\nuse std::io;\nuse std::ops;\nuse std::str::FromStr;\n\n#[derive(Clone, Debug, Default)]\nstruct ProblemState {\n}\n\nimpl Problem {\n    fn solve(&mut self) {\n        let mut a: u64 = self.scan();\n        let mut b: u64 = self.scan();\n        let mut n: u64 = self.scan();\n        let mut m: u64 = self.scan();\n\n        if a < b {\n            let t = a; a = b; b = t;\n        }\n\n        if a > b {\n            n -= min(n, a - b);\n        }\n\n        m -= min(m, b);\n        n -= min(n, b);\n\n        if n == 0 && m == 0 {\n            println!(\"Yes\");\n        } else {\n            println!(\"No\");\n        }\n    }\n}\n\nfn main() {\n    Problem::new().solve_cases();\n}\n\nstruct Problem {\n    input_state: InputState,\n    problem_state: ProblemState,\n}\n\nstruct InputState {\n    stdin: io::Stdin,\n    buffer: String,\n    tokens: VecDeque<String>,\n}\n\nimpl Problem {\n    fn new() -> Self {\n        Self {\n            input_state: InputState {\n                stdin: io::stdin(),\n                buffer: String::new(),\n                tokens: VecDeque::new(),\n            },\n            problem_state: Default::default(),\n        }\n    }\n\n    fn solve_cases(&mut self) {\n        for _ in 0usize..self.scan() {\n            self.solve()\n        }\n    }\n\n    fn scan<T: FromStr>(&mut self) -> T {\n        while self.input_state.tokens.is_empty() {\n            self.input_state.stdin.read_line(&mut self.input_state.buffer).unwrap();\n\n            for token in self.input_state.buffer.split_ascii_whitespace() {\n                self.input_state.tokens.push_back(token.to_string());\n            }\n\n            self.input_state.buffer.clear();\n        }\n\n        self.input_state.tokens.pop_front().unwrap().parse().ok().unwrap()\n    }\n\n    fn scan_vec<T: FromStr>(&mut self, n: usize) -> Vec<T> {\n        (0..n).into_iter().map(|_| self.scan()).collect()\n    }\n\n    fn scan_line(&mut self) -> String {\n        let mut line = String::new();\n        self.input_state.stdin.read_line(&mut line).unwrap();\n        while line.ends_with('\\n') || line.ends_with('\\r') { line.pop(); }\n        line\n    }\n\n    fn scan_line_vec(&mut self, n: usize) -> Vec<String> {\n        (0..n).into_iter().map(|_| self.scan_line()).collect()\n    }\n}\n\nimpl ops::Deref for Problem {\n    type Target = ProblemState;\n\n    fn deref(&self) -> &ProblemState {\n        &self.problem_state\n    }\n}\n\nimpl ops::DerefMut for Problem {\n    fn deref_mut(&mut self) -> &mut ProblemState {\n        &mut self.problem_state\n    }\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "0444352e17cb62cfe0087aaaa9de7bc4", "src_uid": "0f960d19e576b7421a7c7a7166a884ea", "difficulty": 1300}
  60. {"lang": "Rust", "source_code": "#![allow(unused_parens)]\n#![allow(unused_imports)]\n#![allow(non_upper_case_globals)]\n#![allow(non_snake_case)]\n#![allow(unused_mut)]\n#![allow(unused_variables)]\n#![allow(dead_code)]\n\n#[allow(unused_macros)]\nmacro_rules! invec {\n    ( $ t : ty ) => {{\n        let mut s = String::new();\n        match std::io::stdin().read_line(&mut s) {\n            Ok(0) => Vec::<$t>::new(),\n            Ok(n) => s\n                .trim()\n                .split_whitespace()\n                .map(|s| s.parse::<$t>().unwrap())\n                .collect::<Vec<$t>>(),\n            Err(_) => Vec::<$t>::new(),\n        }\n    }};\n}\n\n#[allow(unused_macros)]\nmacro_rules! get {\n      ($t:ty) => {\n          {\n              let mut line: String = String::new();\n              std::io::stdin().read_line(&mut line).unwrap();\n              line.trim().parse::<$t>().unwrap()\n          }\n      };\n      ($($t:ty),*) => {\n          {\n              let mut line: String = String::new();\n              std::io::stdin().read_line(&mut line).unwrap();\n              let mut iter = line.split_whitespace();\n              (\n                  $(iter.next().unwrap().parse::<$t>().unwrap(),)*\n              )\n          }\n      };\n      ($t:ty; $n:expr) => {\n          (0..$n).map(|_|\n              get!($t)\n          ).collect::<Vec<_>>()\n      };\n      ($($t:ty),*; $n:expr) => {\n          (0..$n).map(|_|\n              get!($($t),*)\n          ).collect::<Vec<_>>()\n      };\n      ($t:ty ;;) => {\n          {\n              let mut line: String = String::new();\n              std::io::stdin().read_line(&mut line).unwrap();\n              line.split_whitespace()\n                  .map(|t| t.parse::<$t>().unwrap())\n                  .collect::<Vec<_>>()\n          }\n      };\n      ($t:ty ;; $n:expr) => {\n          (0..$n).map(|_| get!($t ;;)).collect::<Vec<_>>()\n      };\n}\n\n#[allow(unused_macros)]\nmacro_rules! input {\n    (source = $s:expr, $($r:tt)*) => {\n        let mut iter = $s.split_whitespace();\n        input_inner!{iter, $($r)*}\n    };\n    ($($r:tt)*) => {\n        let mut s = {\n            use std::io::Read;\n            let mut s = String::new();\n            std::io::stdin().read_to_string(&mut s).unwrap();\n            s\n        };\n        let mut iter = s.split_whitespace();\n        input_inner!{iter, $($r)*}\n    };\n}\n\nmacro_rules! input_inner {\n    ($iter:expr) => {};\n    ($iter:expr, ) => {};\n\n    ($iter:expr, $var:ident : $t:tt $($r:tt)*) => {\n        let $var = read_value!($iter, $t);\n        input_inner!{$iter $($r)*}\n    };\n    ($iter:expr, mut $var:ident : $t:tt $($r:tt)*) => {\n        let mut $var = read_value!($iter, $t);\n        input_inner!{$iter $($r)*}\n    };\n}\n\n#[allow(unused_macros)]\nmacro_rules! read_value {\n    ($iter:expr, ( $($t:tt),* )) => {\n        ( $(read_value!($iter, $t)),* )\n    };\n\n    ($iter:expr, [ $t:tt ; $len:expr ]) => {\n        (0..$len).map(|_| read_value!($iter, $t)).collect::<Vec<_>>()\n    };\n\n    ($next:expr, [$t:tt]) => {\n        {\n            let len = read_value!($next, usize);\n            (0..len).map(|_| read_value!($next, $t)).collect::<Vec<_>>()\n        }\n    };\n    ($iter:expr, chars) => {\n        read_value!($iter, String).chars().collect::<Vec<char>>()\n    };\n\n    ($iter:expr, usize1) => {\n        read_value!($iter, usize) - 1\n    };\n\n    ($iter:expr, $t:ty) => {\n        $iter.next().unwrap().parse::<$t>().expect(\"Parse error\")\n    };\n}\n\n#[allow(unused_macros)]\n#[cfg(debug_assertions)]\nmacro_rules! mydbg {\n    //($arg:expr) => (dbg!($arg))\n    //($arg:expr) => (println!(\"{:?}\",$arg));\n      ($($a:expr),*) => {\n          eprintln!(concat!($(stringify!($a), \" = {:?}, \"),*), $($a),*);\n      }\n}\n#[cfg(not(debug_assertions))]\nmacro_rules! mydbg {\n    ($($arg:expr),*) => {};\n}\n\nmacro_rules! echo {\n    ($($a:expr),*) => {\n          $(println!(\"{}\",$a))*\n      }\n}\n\nuse std::cmp::*;\nuse std::collections::*;\nuse std::ops::{Add, Div, Mul, Sub};\n\n#[allow(dead_code)]\nstatic INF_I64: i64 = i64::max_value() / 2;\n#[allow(dead_code)]\nstatic INF_I32: i32 = i32::max_value() / 2;\n#[allow(dead_code)]\nstatic INF_USIZE: usize = usize::max_value() / 2;\n#[allow(dead_code)]\nstatic M_O_D: usize = 1000000007;\n#[allow(dead_code)]\nstatic PAI: f64 = 3.1415926535897932;\n\ntrait IteratorExt: Iterator {\n    fn toVec(self) -> Vec<Self::Item>;\n}\n\nimpl<T: Iterator> IteratorExt for T {\n    fn toVec(self) -> Vec<Self::Item> {\n        self.collect()\n    }\n}\n\ntrait CharExt {\n    fn toNum(&self) -> usize;\n    fn toAlphabetIndex(&self) -> usize;\n    fn toNumIndex(&self) -> usize;\n}\nimpl CharExt for char {\n    fn toNum(&self) -> usize {\n        return *self as usize;\n    }\n    fn toAlphabetIndex(&self) -> usize {\n        return self.toNum() - 'a' as usize;\n    }\n    fn toNumIndex(&self) -> usize {\n        return self.toNum() - '0' as usize;\n    }\n}\n\ntrait VectorExt {\n    fn joinToString(&self, s: &str) -> String;\n}\nimpl<T: ToString> VectorExt for Vec<T> {\n    fn joinToString(&self, s: &str) -> String {\n        return self\n            .iter()\n            .map(|x| x.to_string())\n            .collect::<Vec<_>>()\n            .join(s);\n    }\n}\n\ntrait StringExt {\n    fn get_reverse(&self) -> String;\n}\nimpl StringExt for String {\n    fn get_reverse(&self) -> String {\n        self.chars().rev().collect::<String>()\n    }\n}\n\ntrait UsizeExt {\n    fn pow(&self, n: usize) -> usize;\n}\nimpl UsizeExt for usize {\n    fn pow(&self, n: usize) -> usize {\n        return ((*self as u64).pow(n as u32)) as usize;\n    }\n}\n\nfn main() {\n    let T = get!(usize);\n    for testcase in 0..T {\n        mydbg!(testcase);\n        let mut ans: usize = 0;\n        let (mut v, mut c, mut n, mut m) = get!(i64, i64, i64, i64);\n        mydbg!(v, c, n, m);\n\n        if v > c {\n            let x = min(m, c);\n            c -= x;\n            m -= x;\n        } else if v <= c {\n            let x = min(m, v);\n            v -= x;\n            m -= x;\n        }\n\n        mydbg!(v, c, n, m);\n        if v > c {\n            let x = min(n, v);\n            v -= x;\n            n -= x;\n        } else if v <= c {\n            let x = min(n, c);\n            c -= x;\n            n -= x;\n        }\n        mydbg!(v, c, n, m);\n\n        if n == 0 && m == 0 {\n            echo!(\"Yes\");\n        } else {\n            echo!(\"No\");\n        }\n    }\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "72d2fea25f04866e01497803d14b787f", "src_uid": "0f960d19e576b7421a7c7a7166a884ea", "difficulty": 1300}
  61. {"lang": "Rust", "source_code": "#![allow(unused_parens)]\n#![allow(unused_imports)]\n#![allow(non_upper_case_globals)]\n#![allow(non_snake_case)]\n#![allow(unused_mut)]\n#![allow(unused_variables)]\n#![allow(dead_code)]\n\n#[allow(unused_macros)]\nmacro_rules! invec {\n    ( $ t : ty ) => {{\n        let mut s = String::new();\n        match std::io::stdin().read_line(&mut s) {\n            Ok(0) => Vec::<$t>::new(),\n            Ok(n) => s\n                .trim()\n                .split_whitespace()\n                .map(|s| s.parse::<$t>().unwrap())\n                .collect::<Vec<$t>>(),\n            Err(_) => Vec::<$t>::new(),\n        }\n    }};\n}\n\n#[allow(unused_macros)]\nmacro_rules! get {\n      ($t:ty) => {\n          {\n              let mut line: String = String::new();\n              std::io::stdin().read_line(&mut line).unwrap();\n              line.trim().parse::<$t>().unwrap()\n          }\n      };\n      ($($t:ty),*) => {\n          {\n              let mut line: String = String::new();\n              std::io::stdin().read_line(&mut line).unwrap();\n              let mut iter = line.split_whitespace();\n              (\n                  $(iter.next().unwrap().parse::<$t>().unwrap(),)*\n              )\n          }\n      };\n      ($t:ty; $n:expr) => {\n          (0..$n).map(|_|\n              get!($t)\n          ).collect::<Vec<_>>()\n      };\n      ($($t:ty),*; $n:expr) => {\n          (0..$n).map(|_|\n              get!($($t),*)\n          ).collect::<Vec<_>>()\n      };\n      ($t:ty ;;) => {\n          {\n              let mut line: String = String::new();\n              std::io::stdin().read_line(&mut line).unwrap();\n              line.split_whitespace()\n                  .map(|t| t.parse::<$t>().unwrap())\n                  .collect::<Vec<_>>()\n          }\n      };\n      ($t:ty ;; $n:expr) => {\n          (0..$n).map(|_| get!($t ;;)).collect::<Vec<_>>()\n      };\n}\n\n#[allow(unused_macros)]\nmacro_rules! input {\n    (source = $s:expr, $($r:tt)*) => {\n        let mut iter = $s.split_whitespace();\n        input_inner!{iter, $($r)*}\n    };\n    ($($r:tt)*) => {\n        let mut s = {\n            use std::io::Read;\n            let mut s = String::new();\n            std::io::stdin().read_to_string(&mut s).unwrap();\n            s\n        };\n        let mut iter = s.split_whitespace();\n        input_inner!{iter, $($r)*}\n    };\n}\n\nmacro_rules! input_inner {\n    ($iter:expr) => {};\n    ($iter:expr, ) => {};\n\n    ($iter:expr, $var:ident : $t:tt $($r:tt)*) => {\n        let $var = read_value!($iter, $t);\n        input_inner!{$iter $($r)*}\n    };\n    ($iter:expr, mut $var:ident : $t:tt $($r:tt)*) => {\n        let mut $var = read_value!($iter, $t);\n        input_inner!{$iter $($r)*}\n    };\n}\n\n#[allow(unused_macros)]\nmacro_rules! read_value {\n    ($iter:expr, ( $($t:tt),* )) => {\n        ( $(read_value!($iter, $t)),* )\n    };\n\n    ($iter:expr, [ $t:tt ; $len:expr ]) => {\n        (0..$len).map(|_| read_value!($iter, $t)).collect::<Vec<_>>()\n    };\n\n    ($next:expr, [$t:tt]) => {\n        {\n            let len = read_value!($next, usize);\n            (0..len).map(|_| read_value!($next, $t)).collect::<Vec<_>>()\n        }\n    };\n    ($iter:expr, chars) => {\n        read_value!($iter, String).chars().collect::<Vec<char>>()\n    };\n\n    ($iter:expr, usize1) => {\n        read_value!($iter, usize) - 1\n    };\n\n    ($iter:expr, $t:ty) => {\n        $iter.next().unwrap().parse::<$t>().expect(\"Parse error\")\n    };\n}\n\n#[allow(unused_macros)]\n#[cfg(debug_assertions)]\nmacro_rules! mydbg {\n    //($arg:expr) => (dbg!($arg))\n    //($arg:expr) => (println!(\"{:?}\",$arg));\n      ($($a:expr),*) => {\n          eprintln!(concat!($(stringify!($a), \" = {:?}, \"),*), $($a),*);\n      }\n}\n#[cfg(not(debug_assertions))]\nmacro_rules! mydbg {\n    ($($arg:expr),*) => {};\n}\n\nmacro_rules! echo {\n    ($($a:expr),*) => {\n          $(println!(\"{}\",$a))*\n      }\n}\n\nuse std::cmp::*;\nuse std::collections::*;\nuse std::ops::{Add, Div, Mul, Sub};\n\n#[allow(dead_code)]\nstatic INF_I64: i64 = i64::max_value() / 2;\n#[allow(dead_code)]\nstatic INF_I32: i32 = i32::max_value() / 2;\n#[allow(dead_code)]\nstatic INF_USIZE: usize = usize::max_value() / 2;\n#[allow(dead_code)]\nstatic M_O_D: usize = 1000000007;\n#[allow(dead_code)]\nstatic PAI: f64 = 3.1415926535897932;\n\ntrait IteratorExt: Iterator {\n    fn toVec(self) -> Vec<Self::Item>;\n}\n\nimpl<T: Iterator> IteratorExt for T {\n    fn toVec(self) -> Vec<Self::Item> {\n        self.collect()\n    }\n}\n\ntrait CharExt {\n    fn toNum(&self) -> usize;\n    fn toAlphabetIndex(&self) -> usize;\n    fn toNumIndex(&self) -> usize;\n}\nimpl CharExt for char {\n    fn toNum(&self) -> usize {\n        return *self as usize;\n    }\n    fn toAlphabetIndex(&self) -> usize {\n        return self.toNum() - 'a' as usize;\n    }\n    fn toNumIndex(&self) -> usize {\n        return self.toNum() - '0' as usize;\n    }\n}\n\ntrait VectorExt {\n    fn joinToString(&self, s: &str) -> String;\n}\nimpl<T: ToString> VectorExt for Vec<T> {\n    fn joinToString(&self, s: &str) -> String {\n        return self\n            .iter()\n            .map(|x| x.to_string())\n            .collect::<Vec<_>>()\n            .join(s);\n    }\n}\n\ntrait StringExt {\n    fn get_reverse(&self) -> String;\n}\nimpl StringExt for String {\n    fn get_reverse(&self) -> String {\n        self.chars().rev().collect::<String>()\n    }\n}\n\ntrait UsizeExt {\n    fn pow(&self, n: usize) -> usize;\n}\nimpl UsizeExt for usize {\n    fn pow(&self, n: usize) -> usize {\n        return ((*self as u64).pow(n as u32)) as usize;\n    }\n}\n\nfn main() {\n    let T = get!(usize);\n    for testcase in 0..T {\n        let mut ans: usize = 0;\n        let (mut v, mut c, mut n, mut m) = get!(u64, u64, u64, u64);\n        if v > c {\n            std::mem::swap(&mut v, &mut c);\n        }\n        if m > v {\n            echo!(\"No\");\n        } else if v - m + c < n {\n            echo!(\"No\");\n        } else {\n            echo!(\"Yes\");\n        }\n    }\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "716973821a6a38ea6231a427aeaa54ce", "src_uid": "0f960d19e576b7421a7c7a7166a884ea", "difficulty": 1300}
  62. {"lang": "Rust", "source_code": "#![allow(unused_parens)]\n#![allow(unused_imports)]\n#![allow(non_upper_case_globals)]\n#![allow(non_snake_case)]\n#![allow(unused_mut)]\n#![allow(unused_variables)]\n#![allow(dead_code)]\n\n#[allow(unused_macros)]\nmacro_rules! invec {\n    ( $ t : ty ) => {{\n        let mut s = String::new();\n        match std::io::stdin().read_line(&mut s) {\n            Ok(0) => Vec::<$t>::new(),\n            Ok(n) => s\n                .trim()\n                .split_whitespace()\n                .map(|s| s.parse::<$t>().unwrap())\n                .collect::<Vec<$t>>(),\n            Err(_) => Vec::<$t>::new(),\n        }\n    }};\n}\n\n#[allow(unused_macros)]\nmacro_rules! get {\n      ($t:ty) => {\n          {\n              let mut line: String = String::new();\n              std::io::stdin().read_line(&mut line).unwrap();\n              line.trim().parse::<$t>().unwrap()\n          }\n      };\n      ($($t:ty),*) => {\n          {\n              let mut line: String = String::new();\n              std::io::stdin().read_line(&mut line).unwrap();\n              let mut iter = line.split_whitespace();\n              (\n                  $(iter.next().unwrap().parse::<$t>().unwrap(),)*\n              )\n          }\n      };\n      ($t:ty; $n:expr) => {\n          (0..$n).map(|_|\n              get!($t)\n          ).collect::<Vec<_>>()\n      };\n      ($($t:ty),*; $n:expr) => {\n          (0..$n).map(|_|\n              get!($($t),*)\n          ).collect::<Vec<_>>()\n      };\n      ($t:ty ;;) => {\n          {\n              let mut line: String = String::new();\n              std::io::stdin().read_line(&mut line).unwrap();\n              line.split_whitespace()\n                  .map(|t| t.parse::<$t>().unwrap())\n                  .collect::<Vec<_>>()\n          }\n      };\n      ($t:ty ;; $n:expr) => {\n          (0..$n).map(|_| get!($t ;;)).collect::<Vec<_>>()\n      };\n}\n\n#[allow(unused_macros)]\nmacro_rules! input {\n    (source = $s:expr, $($r:tt)*) => {\n        let mut iter = $s.split_whitespace();\n        input_inner!{iter, $($r)*}\n    };\n    ($($r:tt)*) => {\n        let mut s = {\n            use std::io::Read;\n            let mut s = String::new();\n            std::io::stdin().read_to_string(&mut s).unwrap();\n            s\n        };\n        let mut iter = s.split_whitespace();\n        input_inner!{iter, $($r)*}\n    };\n}\n\nmacro_rules! input_inner {\n    ($iter:expr) => {};\n    ($iter:expr, ) => {};\n\n    ($iter:expr, $var:ident : $t:tt $($r:tt)*) => {\n        let $var = read_value!($iter, $t);\n        input_inner!{$iter $($r)*}\n    };\n    ($iter:expr, mut $var:ident : $t:tt $($r:tt)*) => {\n        let mut $var = read_value!($iter, $t);\n        input_inner!{$iter $($r)*}\n    };\n}\n\n#[allow(unused_macros)]\nmacro_rules! read_value {\n    ($iter:expr, ( $($t:tt),* )) => {\n        ( $(read_value!($iter, $t)),* )\n    };\n\n    ($iter:expr, [ $t:tt ; $len:expr ]) => {\n        (0..$len).map(|_| read_value!($iter, $t)).collect::<Vec<_>>()\n    };\n\n    ($next:expr, [$t:tt]) => {\n        {\n            let len = read_value!($next, usize);\n            (0..len).map(|_| read_value!($next, $t)).collect::<Vec<_>>()\n        }\n    };\n    ($iter:expr, chars) => {\n        read_value!($iter, String).chars().collect::<Vec<char>>()\n    };\n\n    ($iter:expr, usize1) => {\n        read_value!($iter, usize) - 1\n    };\n\n    ($iter:expr, $t:ty) => {\n        $iter.next().unwrap().parse::<$t>().expect(\"Parse error\")\n    };\n}\n\n#[allow(unused_macros)]\n#[cfg(debug_assertions)]\nmacro_rules! mydbg {\n    //($arg:expr) => (dbg!($arg))\n    //($arg:expr) => (println!(\"{:?}\",$arg));\n      ($($a:expr),*) => {\n          eprintln!(concat!($(stringify!($a), \" = {:?}, \"),*), $($a),*);\n      }\n}\n#[cfg(not(debug_assertions))]\nmacro_rules! mydbg {\n    ($($arg:expr),*) => {};\n}\n\nmacro_rules! echo {\n    ($($a:expr),*) => {\n          $(println!(\"{}\",$a))*\n      }\n}\n\nuse std::cmp::*;\nuse std::collections::*;\nuse std::ops::{Add, Div, Mul, Sub};\n\n#[allow(dead_code)]\nstatic INF_I64: i64 = i64::max_value() / 2;\n#[allow(dead_code)]\nstatic INF_I32: i32 = i32::max_value() / 2;\n#[allow(dead_code)]\nstatic INF_USIZE: usize = usize::max_value() / 2;\n#[allow(dead_code)]\nstatic M_O_D: usize = 1000000007;\n#[allow(dead_code)]\nstatic PAI: f64 = 3.1415926535897932;\n\ntrait IteratorExt: Iterator {\n    fn toVec(self) -> Vec<Self::Item>;\n}\n\nimpl<T: Iterator> IteratorExt for T {\n    fn toVec(self) -> Vec<Self::Item> {\n        self.collect()\n    }\n}\n\ntrait CharExt {\n    fn toNum(&self) -> usize;\n    fn toAlphabetIndex(&self) -> usize;\n    fn toNumIndex(&self) -> usize;\n}\nimpl CharExt for char {\n    fn toNum(&self) -> usize {\n        return *self as usize;\n    }\n    fn toAlphabetIndex(&self) -> usize {\n        return self.toNum() - 'a' as usize;\n    }\n    fn toNumIndex(&self) -> usize {\n        return self.toNum() - '0' as usize;\n    }\n}\n\ntrait VectorExt {\n    fn joinToString(&self, s: &str) -> String;\n}\nimpl<T: ToString> VectorExt for Vec<T> {\n    fn joinToString(&self, s: &str) -> String {\n        return self\n            .iter()\n            .map(|x| x.to_string())\n            .collect::<Vec<_>>()\n            .join(s);\n    }\n}\n\ntrait StringExt {\n    fn get_reverse(&self) -> String;\n}\nimpl StringExt for String {\n    fn get_reverse(&self) -> String {\n        self.chars().rev().collect::<String>()\n    }\n}\n\ntrait UsizeExt {\n    fn pow(&self, n: usize) -> usize;\n}\nimpl UsizeExt for usize {\n    fn pow(&self, n: usize) -> usize {\n        return ((*self as u64).pow(n as u32)) as usize;\n    }\n}\n\nfn main() {\n    let T = get!(usize);\n    for testcase in 0..T {\n        mydbg!(testcase);\n        let mut ans: usize = 0;\n        let (mut v, mut c, mut n, mut m) = get!(i64, i64, i64, i64);\n        mydbg!(v, c, n, m);\n\n        if v > c {\n            let x = min(m, c);\n            c -= x;\n            m -= x;\n        } else if v <= c {\n            let x = min(m, v);\n            v -= x;\n            m -= x;\n        }\n\n        mydbg!(v, c, n, m);\n        if v > c {\n            let x = min(n, v - c);\n            v -= x;\n            n -= x;\n        } else if v <= c {\n            let x = min(n, c - v);\n            c -= x;\n            n -= x;\n        }\n        mydbg!(v, c, n, m);\n\n        if n == 0 && m == 0 {\n            echo!(\"Yes\");\n        } else {\n            echo!(\"No\");\n        }\n    }\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "becfc1fd55b4f46b642ae54796c1a487", "src_uid": "0f960d19e576b7421a7c7a7166a884ea", "difficulty": 1300}
  63. {"lang": "Rust", "source_code": "#![allow(unused_imports)]\n#![allow(dead_code)]\n \nuse std::io::Read;\n \n\nstruct State {\n    a: i64,\n    b: i64,\n    n: i64,\n    m: i64\n}\n\nfn solve(st: &mut State) {\n    let mut a = st.a;\n    let mut b = st.b;\n    if a < b {\n        std::mem::swap(&mut a, &mut b);   \n    }\n    if b < st.m {\n        print!(\"No\\n\");\n        return;\n    }\n    b -= st.m;\n    if a + b >= st.n {\n        print!(\"Yes\\n\");\n    }\n    else {\n        print!(\"No\\n\");\n    }\n}\nfn main() {\n    let mut buffer = String::new();\n    std::io::stdin().read_to_string(&mut buffer).unwrap();\n    let mut input = buffer.split_whitespace();\n \n    let t: usize = input.next().unwrap().parse().unwrap();\n    for _ in 0..t {\n        let a: i64 = input.next().unwrap().parse().unwrap();\n        let b: i64 = input.next().unwrap().parse().unwrap();\n        let n: i64 = input.next().unwrap().parse().unwrap();\n        let m: i64 = input.next().unwrap().parse().unwrap();\n        //let a: Vec<i64> = (0..n).map(|_| input.next().unwrap().parse().unwrap()).collect();\n        solve(&mut State{a: a, b: b, n: n, m: m});\n    }\n \n}", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "3816a214151cc20527a319a7cb7fe1e9", "src_uid": "0f960d19e576b7421a7c7a7166a884ea", "difficulty": 1300}
  64. {"lang": "Rust", "source_code": "//  ____            _                  _                       _       _\n// |  _ \\ _   _ ___| |_    ___ _ __   | |_ ___ _ __ ___  _ __ | | __ _| |_ ___\n// | |_) | | | / __| __|  / __| '_ \\  | __/ _ \\ '_ ` _ \\| '_ \\| |/ _` | __/ _ \\\n// |  _ <| |_| \\__ \\ |_  | (__| |_) | | ||  __/ | | | | | |_) | | (_| | ||  __/\n// |_| \\_\\\\__,_|___/\\__|  \\___| .__/___\\__\\___|_| |_| |_| .__/|_|\\__,_|\\__\\___|\n//                            |_| |_____|               |_|\n\n//https://github.com/manta1130/Competitive_Programming_Template_Rust\n\n#[macro_use]\nmod input {\n\n    use std;\n    use std::io;\n\n    const SPLIT_DELIMITER: char = ' ';\n\n    #[macro_export]\n    #[allow(unused_macros)]\n    macro_rules! input {\n    ( $($x:expr ),*) => {\n        {\n            let temp_str = input_line_str();\n            let mut split_result_iter = temp_str.split_whitespace();\n                $(\n                let buf_split_result = split_result_iter.next();\n                let buf_split_result = buf_split_result.unwrap();\n                    ($x) = buf_split_result.parse().unwrap();\n                )*\n        }\n    };\n}\n\n    #[allow(dead_code)]\n    pub fn input_line_str() -> String {\n        let mut s = String::new();\n        io::stdin().read_line(&mut s).unwrap();\n        s.trim().to_string()\n    }\n\n    #[allow(dead_code)]\n    pub fn p<T>(t: T)\n    where\n        T: std::fmt::Display,\n    {\n        println!(\"{}\", t);\n    }\n\n    #[allow(dead_code)]\n    pub fn input_vector2d<T>(line: usize) -> Vec<Vec<T>>\n    where\n        T: std::str::FromStr,\n    {\n        let mut v: Vec<Vec<T>> = Vec::new();\n\n        for _ in 0..line {\n            let vec_line = input_vector();\n            v.push(vec_line);\n        }\n        v\n    }\n\n    #[allow(dead_code)]\n    pub fn input_vector<T>() -> Vec<T>\n    where\n        T: std::str::FromStr,\n    {\n        let mut v: Vec<T> = Vec::new();\n\n        let s = input_line_str();\n        let split_result = s.split(SPLIT_DELIMITER);\n        for z in split_result {\n            let buf = match z.parse() {\n                Ok(r) => r,\n                Err(_) => panic!(\"Parse Error\"),\n            };\n            v.push(buf);\n        }\n        v\n    }\n\n    #[allow(dead_code)]\n    pub fn input_vector_row<T>(n: usize) -> Vec<T>\n    where\n        T: std::str::FromStr,\n    {\n        let mut v = Vec::with_capacity(n);\n        for _ in 0..n {\n            let buf = match input_line_str().parse() {\n                Ok(r) => r,\n                Err(_) => panic!(\"Parse Error\"),\n            };\n            v.push(buf);\n        }\n        v\n    }\n\n    pub trait ToCharVec {\n        fn to_charvec(&self) -> Vec<char>;\n    }\n\n    impl ToCharVec for String {\n        fn to_charvec(&self) -> Vec<char> {\n            self.to_string().chars().collect::<Vec<_>>()\n        }\n    }\n}\n\nuse input::*;\nuse std::io::{stdout, BufWriter, Write};\nfn main() {\n    let out = stdout();\n    let mut out = BufWriter::new(out.lock());\n    let t: usize;\n    input!(t);\n    for _ in 0..t {\n        let (mut a, mut b, mut n, m): (u64, u64, u64, u64);\n        input!(a, b, n, m);\n        if a + b < n + m {\n            writeln!(out, \"No\").unwrap();\n            continue;\n        }\n        let diff = std::cmp::max(a, b) - std::cmp::min(a, b);\n        if a > b {\n            a -= std::cmp::min(diff, n);\n        } else {\n            b -= std::cmp::min(diff, n);\n        }\n        if diff > n {\n            n = 0;\n        } else {\n            n -= diff;\n        }\n        if std::cmp::min(a, b) < m {\n            writeln!(out, \"No\").unwrap();\n            continue;\n        }\n        writeln!(out, \"Yes\").unwrap();\n    }\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "41f2121957142a30b2d663820b329042", "src_uid": "0f960d19e576b7421a7c7a7166a884ea", "difficulty": 1300}
  65. {"lang": "Rust", "source_code": "use std::cmp;\nuse std::io;\n\nstruct Scanner {\n    buffer: Vec<String>,\n}\n\nimpl Scanner {\n    fn next<T: std::str::FromStr>(&mut self) -> T {\n        if self.buffer.is_empty() {\n            let mut input = String::new();\n            io::stdin().read_line(&mut input).ok();\n            self.buffer = input\n                .trim()\n                .split(' ')\n                .map(|x| x.to_string())\n                .rev()\n                .collect();\n        }\n        let x = self.buffer.pop().unwrap();\n        match x.parse::<T>() {\n            Ok(y) => y,\n            _ => panic!(\"Parsing error !!!\"),\n        }\n    }\n}\n\nfn main() {\n    let mut scan = Scanner { buffer: Vec::new() };\n    let t = scan.next::<u32>();\n    for _test in 0..t {\n        let v = scan.next::<u64>();\n        let c = scan.next::<u64>();\n        let n = scan.next::<u64>();\n        let m = scan.next::<u64>();\n        if n + m <= v + c && cmp::min(v, c) >= m {\n            println!(\"Yes\");\n        } else {\n            println!(\"No\");\n        }\n    }\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "0bf0249df981052aaeeb489b11382107", "src_uid": "0f960d19e576b7421a7c7a7166a884ea", "difficulty": 1300}
  66. {"lang": "Rust", "source_code": "// First Rust Submission\n\nuse std::io;\n\nfn mnm(x: u64, y: u64) -> u64 {\n    if x < y {\n        return x;\n    } else {\n        return y;\n    }\n}\n\nfn main() {\n    let mut line = String::new();\n    io::stdin().read_line(&mut line).unwrap();\n    let case: u32 = line.trim().parse().unwrap();\n    for test in 0..case {\n        line.clear();\n        io::stdin().read_line(&mut line).unwrap();\n        let input: Vec<&str> = line.split(' ').collect();\n        let v: u64 = input[0].trim().parse().unwrap();\n        let c: u64 = input[1].trim().parse().unwrap();\n        let n: u64 = input[2].trim().parse().unwrap();\n        let m: u64 = input[3].trim().parse().unwrap();\n        if v + c >= n + m && mnm(v, c) >= m {\n            println!(\"{}\", \"YES\");\n        } else {\n            println!(\"{}\", \"NO\");\n        }\n    }\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "ea0a14b308b0177123f9b440fbaf49fe", "src_uid": "0f960d19e576b7421a7c7a7166a884ea", "difficulty": 1300}
  67. {"lang": "Rust", "source_code": "use std::io::{self, BufRead};\nuse std::cmp::min;\n\nfn main() {\n  let stdin = io::stdin();\n  let mut lines = stdin.lock().lines();\n  let t: usize = lines.next().unwrap().unwrap().parse().unwrap();\n  for _ in 0..t {\n    let xs: Vec<u64> = lines.next().unwrap().unwrap().split(' ').map(|x| x.parse().unwrap()).collect();\n    let (a, b, n, m) = (xs[0], xs[1], xs[2], xs[3]);\n    let c = min(a, b);\n    let ok = m <= c && m + n <= a + b;\n    println!(\"{}\", if ok { \"Yes\" } else { \"No\" });\n  }\n}", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "cc5388c57d67f8edd3359905fead33a9", "src_uid": "0f960d19e576b7421a7c7a7166a884ea", "difficulty": 1300}
  68. {"lang": "Rust", "source_code": "//https://qiita.com/tanakh/items/0ba42c7ca36cd29d0ac8 \u3088\u308a\nmacro_rules! input {\n    (source = $s:expr, $($r:tt)*) => {\n        let mut iter = $s.split_whitespace();\n        input_inner!{iter, $($r)*}\n    };\n    ($($r:tt)*) => {\n        let s = {\n            use std::io::Read;\n            let mut s = String::new();\n            std::io::stdin().read_to_string(&mut s).unwrap();\n            s\n        };\n        let mut iter = s.split_whitespace();\n        input_inner!{iter, $($r)*}\n    };\n}\n\nmacro_rules! input_inner {\n    ($iter:expr) => {};\n    ($iter:expr, ) => {};\n    ($iter:expr, $var:ident : $t:tt $($r:tt)*) => {\n        let $var = read_value!($iter, $t);\n        input_inner!{$iter $($r)*}\n    };\n}\n\nmacro_rules! read_value {\n    ($iter:expr, ( $($t:tt),* )) => {\n        ( $(read_value!($iter, $t)),* )\n    };\n    ($iter:expr, [ $t:tt ; $len:expr ]) => {\n        (0..$len).map(|_| read_value!($iter, $t)).collect::<Vec<_>>()\n    };\n    ($iter:expr, chars) => {\n        read_value!($iter, String).chars().collect::<Vec<char>>()\n    };\n    ($iter:expr, bytes) => {\n        read_value!($iter, String).bytes().collect::<Vec<u8>>()\n    };\n    ($iter:expr, usize1) => {\n        read_value!($iter, usize) - 1\n    };\n    ($iter:expr, $t:ty) => {\n        $iter.next().unwrap().parse::<$t>().expect(\"Parse error\")\n    };\n}\n\n//\n\nuse std::io::Write;\n\nfn run() {\n    let out = std::io::stdout();\n    let mut out = std::io::BufWriter::new(out.lock());\n    input! {\n        t: usize,\n        ask: [(i64, i64, i64, i64); t],\n    }\n    for (mut a, mut b, n, m) in ask {\n        if a < b {\n            std::mem::swap(&mut a, &mut b);\n        }\n        let ans = if b < m || a + b < n + m {\n            \"No\"\n        } else {\n            \"Yes\"\n        };\n        writeln!(out, \"{}\", ans).ok();\n    }\n}\n\nfn main() {\n    run();\n}\n", "lang_cluster": "Rust", "compilation_error": false, "code_uid": "7c2c5be44f85b2c1ac5f8389bcba0518", "src_uid": "0f960d19e576b7421a7c7a7166a884ea", "difficulty": 1300}
  69.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement