ログインしてください。
提出 #65814623
ソースコード 拡げる
use proconio::input;
const HEIGHT: usize = 30;
fn main() {
input! {
q: usize,
queries: [usize; q],
}
let mut root = SegtreeNode {
children: [None, None],
value: Value {
sum: [0, 0],
parity: 0,
},
};
let mut prev_ans = 0;
for &query in &queries {
let query = (prev_ans + query) % 1_000_000_000 + 1;
root.insert(query, HEIGHT);
let ans = root.value.sum[0];
println!("{ans}");
prev_ans = ans;
}
}
#[derive(PartialEq, Eq, Clone, Copy)]
struct Value {
sum: [usize; 2],
parity: usize,
}
impl std::fmt::Debug for Value {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_tuple("")
.field(&self.sum)
.field(&self.parity)
.finish()
}
}
#[derive(Debug, PartialEq, Eq, Clone)]
struct SegtreeNode {
children: [Option<Box<SegtreeNode>>; 2],
value: Value,
}
impl SegtreeNode {
fn insert(&mut self, query: usize, height: usize) {
if height == 0 {
self.value.sum[self.value.parity] += query;
self.value.parity ^= 1;
return;
}
let dir = (query >> (height - 1)) & 1;
if self.children[dir].is_none() {
self.children[dir] = Some(Box::new(SegtreeNode {
children: [None, None],
value: Value {
sum: [0, 0],
parity: 0,
},
}));
}
let child = self.children[dir].as_mut().unwrap();
child.insert(query, height - 1);
let value = [
self.children[0].as_ref().map_or([0, 0], |c| c.value.sum),
self.children[1].as_ref().map_or([0, 0], |c| c.value.sum),
];
let parity = [
self.children[0].as_ref().map_or(0, |c| c.value.parity),
self.children[1].as_ref().map_or(0, |c| c.value.parity),
];
self.value.sum = [
value[0][0] + value[1][parity[0]],
value[0][1] + value[1][1 ^ parity[0]],
];
self.value.parity = parity[0] ^ parity[1];
}
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | G - Odd Position Sum Query |
| ユーザ | ngtkana |
| 言語 | Rust (rustc 1.70.0) |
| 得点 | 600 |
| コード長 | 2248 Byte |
| 結果 | AC |
| 実行時間 | 895 ms |
| メモリ | 200052 KiB |
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 600 / 600 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | 00_sample_00.txt, 00_sample_01.txt |
| All | 00_sample_00.txt, 00_sample_01.txt, 01_test_00.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt, 01_test_25.txt, 01_test_26.txt, 01_test_27.txt, 01_test_28.txt, 01_test_29.txt, 01_test_30.txt, 01_test_31.txt, 01_test_32.txt, 01_test_33.txt, 01_test_34.txt, 01_test_35.txt, 01_test_36.txt, 01_test_37.txt, 01_test_38.txt, 01_test_39.txt, 01_test_40.txt, 01_test_41.txt, 01_test_42.txt, 01_test_43.txt, 01_test_44.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| 00_sample_00.txt | AC | 1 ms | 1972 KiB |
| 00_sample_01.txt | AC | 1 ms | 1944 KiB |
| 01_test_00.txt | AC | 0 ms | 2024 KiB |
| 01_test_01.txt | AC | 0 ms | 1944 KiB |
| 01_test_02.txt | AC | 0 ms | 1964 KiB |
| 01_test_03.txt | AC | 1 ms | 2144 KiB |
| 01_test_04.txt | AC | 1 ms | 2224 KiB |
| 01_test_05.txt | AC | 2 ms | 2364 KiB |
| 01_test_06.txt | AC | 15 ms | 7508 KiB |
| 01_test_07.txt | AC | 4 ms | 3528 KiB |
| 01_test_08.txt | AC | 46 ms | 16664 KiB |
| 01_test_09.txt | AC | 282 ms | 71108 KiB |
| 01_test_10.txt | AC | 538 ms | 125680 KiB |
| 01_test_11.txt | AC | 427 ms | 112652 KiB |
| 01_test_12.txt | AC | 895 ms | 190628 KiB |
| 01_test_13.txt | AC | 794 ms | 190508 KiB |
| 01_test_14.txt | AC | 245 ms | 6564 KiB |
| 01_test_15.txt | AC | 381 ms | 10124 KiB |
| 01_test_16.txt | AC | 273 ms | 7396 KiB |
| 01_test_17.txt | AC | 383 ms | 10132 KiB |
| 01_test_18.txt | AC | 356 ms | 9188 KiB |
| 01_test_19.txt | AC | 388 ms | 10136 KiB |
| 01_test_20.txt | AC | 251 ms | 7168 KiB |
| 01_test_21.txt | AC | 410 ms | 10992 KiB |
| 01_test_22.txt | AC | 408 ms | 17136 KiB |
| 01_test_23.txt | AC | 512 ms | 18308 KiB |
| 01_test_24.txt | AC | 532 ms | 69304 KiB |
| 01_test_25.txt | AC | 661 ms | 74604 KiB |
| 01_test_26.txt | AC | 864 ms | 200052 KiB |
| 01_test_27.txt | AC | 842 ms | 199984 KiB |
| 01_test_28.txt | AC | 823 ms | 195376 KiB |
| 01_test_29.txt | AC | 867 ms | 195432 KiB |
| 01_test_30.txt | AC | 810 ms | 198112 KiB |
| 01_test_31.txt | AC | 889 ms | 198060 KiB |
| 01_test_32.txt | AC | 641 ms | 97232 KiB |
| 01_test_33.txt | AC | 736 ms | 96608 KiB |
| 01_test_34.txt | AC | 576 ms | 190548 KiB |
| 01_test_35.txt | AC | 623 ms | 190572 KiB |
| 01_test_36.txt | AC | 580 ms | 190424 KiB |
| 01_test_37.txt | AC | 619 ms | 190616 KiB |
| 01_test_38.txt | AC | 596 ms | 190452 KiB |
| 01_test_39.txt | AC | 597 ms | 190488 KiB |
| 01_test_40.txt | AC | 599 ms | 190384 KiB |
| 01_test_41.txt | AC | 593 ms | 190596 KiB |
| 01_test_42.txt | AC | 1 ms | 2036 KiB |
| 01_test_43.txt | AC | 378 ms | 7500 KiB |
| 01_test_44.txt | AC | 386 ms | 10268 KiB |