Submission #51107333


Source Code Expand

use std::collections::HashMap;

use proconio::input;

const DEBUG: bool = false;
#[derive(Clone, Copy)]
struct Element {
    next: Option<usize>,
    prev: Option<usize>,
}

fn main() {
    input! {
       n: usize,
       a: [usize;n],
       q: usize,
    }

    let mut indexes: HashMap<usize, Element> = HashMap::new();

    if n == 1 {
        indexes.insert(0, Element { next: Some(a[0]), prev: None });
        indexes.insert(a[0], Element { next: None, prev: Some(0) });
    } else {
        indexes.insert(0, Element { next: Some(a[0]), prev: None });
        indexes.insert(a[0], Element { next: Some(a[1]), prev: Some(0) });

        for i in 1..n - 1 {
            indexes.insert(a[i], Element { next: Some(a[i + 1]), prev: Some(a[i - 1]) });
        }
        indexes.insert(a[n - 1], Element { next: None, prev: Some(a[n - 2]) });
    }

    for _query_index in 0..q {
        input! {
            t: char,
        }

        if t == '1' {
            // Insertion of y after x
            input! {
                x: usize,
                y: usize,
            }

            let element_x = indexes.get(&x).unwrap();
            if element_x.next.is_none() {
                indexes.insert(y, Element { next: None, prev: Some(x) });
                indexes.entry(x).and_modify(|e| {
                    e.next = Some(y);
                });
            } else {
                let element_next_index = &element_x.next.unwrap();
                indexes.insert(y, Element { next: element_x.next, prev: Some(x) });
                indexes.entry(x).and_modify(|e| {
                    e.next = Some(y);
                });
                indexes.entry(*element_next_index).and_modify(|f| {
                    f.prev = Some(y);
                });
            }
        } else {
            input! {
                x: usize,
            }

            // Deletion of x
            let &element_x = indexes.get(&x).unwrap();
            if !element_x.prev.is_none() {
                let element_prev_index = indexes.get_mut(element_x.prev.as_ref().unwrap()).unwrap();
                element_prev_index.next = element_x.next;
            }
            if !element_x.next.is_none() {
                let element_next_index = indexes.get_mut(element_x.next.as_ref().unwrap()).unwrap();
                element_next_index.prev = element_x.prev;
            }
        }
    }
    let mut cur_next = indexes.get(&0).unwrap().next;
    while cur_next.is_some() {
        print!("{} ", cur_next.unwrap());
        cur_next = indexes.get(&cur_next.unwrap()).unwrap().next;
    }

    println!();
}

Submission Info

Submission Time
Task E - Insert or Erase
User alixfachin
Language Rust (rustc 1.70.0)
Score 475
Code Size 2607 Byte
Status AC
Exec Time 181 ms
Memory 41128 KiB

Compile Error

warning: constant `DEBUG` is never used
 --> src/main.rs:5:7
  |
5 | const DEBUG: bool = false;
  |       ^^^^^
  |
  = note: `#[warn(dead_code)]` on by default

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 475 / 475
Status
AC × 2
AC × 24
Set Name Test Cases
Sample sample_01.txt, sample_02.txt
All min.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, random_19.txt, random_20.txt, random_21.txt, sample_01.txt, sample_02.txt
Case Name Status Exec Time Memory
min.txt AC 1 ms 1928 KiB
random_01.txt AC 181 ms 41072 KiB
random_02.txt AC 140 ms 38684 KiB
random_03.txt AC 138 ms 39356 KiB
random_04.txt AC 42 ms 12012 KiB
random_05.txt AC 147 ms 40248 KiB
random_06.txt AC 81 ms 22352 KiB
random_07.txt AC 136 ms 39516 KiB
random_08.txt AC 51 ms 20508 KiB
random_09.txt AC 87 ms 23376 KiB
random_10.txt AC 47 ms 21968 KiB
random_11.txt AC 68 ms 23004 KiB
random_12.txt AC 12 ms 7084 KiB
random_13.txt AC 150 ms 40972 KiB
random_14.txt AC 110 ms 40156 KiB
random_15.txt AC 69 ms 23440 KiB
random_16.txt AC 156 ms 41128 KiB
random_17.txt AC 111 ms 40188 KiB
random_18.txt AC 69 ms 23508 KiB
random_19.txt AC 66 ms 20808 KiB
random_20.txt AC 146 ms 38952 KiB
random_21.txt AC 69 ms 22152 KiB
sample_01.txt AC 1 ms 1940 KiB
sample_02.txt AC 1 ms 2072 KiB