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 |
|
|
| 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 |