Submission #18760061


Source Code Expand

use proconio::{fastout, input};

fn sum(index: usize, arrays: &Vec<Vec<u64>>) -> u64 {
    let mut stack = Vec::new();
    let mut idx = index;
    let mut pos = 0;
    let mut value = 0;

    for _ in 0..arrays.len() {
        stack.push(idx);
        idx /= 2;
    }

    for i in 0..arrays.len() {
        let p = stack[stack.len() - i - 1];

        if p != pos {
            value ^= arrays[i][p - 1];
            pos = p;
        }

        pos *= 2;
    }

    value
}

fn multi(idx: usize, y: u64, arrays: &mut Vec<Vec<u64>>) {
    let mut index = idx;

    for i in (0..arrays.len()).rev() {
        arrays[i][index] ^= y;
        index /= 2;
    }
}

#[fastout]
fn main() {
    input! {in_n: usize, in_q: usize, in_as: [u64; in_n]};
    let mut arrays = Vec::new();
    let mut size = 1;

    arrays.push(vec![0; size]);

    while size < in_n {
        size *= 2;
        arrays.push(vec![0; size]);
    }

    for (i, v) in in_as.iter().enumerate() {
        let mut index = i;

        for j in (0..arrays.len()).rev() {
            arrays[j][index] ^= v;
            index /= 2;
        }
    }

    for _ in 0..in_q {
        input! {in_t: i32, in_x: u64, in_y: u64};

        if in_t == 2 {
            let start = (in_x - 1) as usize;
            let end = in_y as usize;
            println!("{}", sum(start, &arrays) ^ sum(end, &arrays));
        } else {
            let index = (in_x - 1) as usize;
            multi(index, in_y, &mut arrays);
        }
    }
}

Submission Info

Submission Time
Task F - Range Xor Query
User takedarts
Language Rust (1.42.0)
Score 600
Code Size 1483 Byte
Status AC
Exec Time 247 ms
Memory 17824 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 2
AC × 20
Set Name Test Cases
Sample sample_01.txt, sample_02.txt
All handmade_00.txt, handmade_01.txt, max_00.txt, max_01.txt, max_02.txt, max_03.txt, max_04.txt, max_05.txt, max_06.txt, max_07.txt, power_of_2_00.txt, power_of_2_01.txt, power_of_2_02.txt, random_00.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, sample_01.txt, sample_02.txt
Case Name Status Exec Time Memory
handmade_00.txt AC 6 ms 1972 KiB
handmade_01.txt AC 2 ms 2108 KiB
max_00.txt AC 167 ms 16940 KiB
max_01.txt AC 169 ms 16956 KiB
max_02.txt AC 163 ms 16592 KiB
max_03.txt AC 223 ms 17124 KiB
max_04.txt AC 241 ms 17824 KiB
max_05.txt AC 247 ms 17820 KiB
max_06.txt AC 89 ms 17404 KiB
max_07.txt AC 172 ms 16900 KiB
power_of_2_00.txt AC 148 ms 14620 KiB
power_of_2_01.txt AC 145 ms 14656 KiB
power_of_2_02.txt AC 148 ms 14652 KiB
random_00.txt AC 130 ms 9048 KiB
random_01.txt AC 104 ms 12156 KiB
random_02.txt AC 39 ms 3332 KiB
random_03.txt AC 129 ms 12160 KiB
random_04.txt AC 26 ms 2764 KiB
sample_01.txt AC 2 ms 2064 KiB
sample_02.txt AC 2 ms 2020 KiB