結果

問題 No.1167 Graduation Trip
ユーザー akakimidoriakakimidori
提出日時 2021-02-27 13:19:29
言語 Rust
(1.77.0 + proconio)
結果
AC  
実行時間 19 ms / 4,000 ms
コード長 1,862 bytes
コンパイル時間 16,575 ms
コンパイル使用メモリ 383,548 KB
実行使用メモリ 5,376 KB
最終ジャッジ日時 2024-10-02 17:25:51
合計ジャッジ時間 16,763 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 13 ms
5,248 KB
testcase_01 AC 14 ms
5,248 KB
testcase_02 AC 14 ms
5,248 KB
testcase_03 AC 14 ms
5,248 KB
testcase_04 AC 14 ms
5,248 KB
testcase_05 AC 14 ms
5,248 KB
testcase_06 AC 14 ms
5,248 KB
testcase_07 AC 14 ms
5,248 KB
testcase_08 AC 14 ms
5,248 KB
testcase_09 AC 13 ms
5,248 KB
testcase_10 AC 18 ms
5,276 KB
testcase_11 AC 19 ms
5,300 KB
testcase_12 AC 18 ms
5,248 KB
testcase_13 AC 18 ms
5,248 KB
testcase_14 AC 19 ms
5,272 KB
testcase_15 AC 18 ms
5,304 KB
testcase_16 AC 18 ms
5,248 KB
testcase_17 AC 18 ms
5,248 KB
testcase_18 AC 18 ms
5,248 KB
testcase_19 AC 18 ms
5,376 KB
testcase_20 AC 5 ms
5,248 KB
testcase_21 AC 5 ms
5,248 KB
testcase_22 AC 4 ms
5,248 KB
testcase_23 AC 5 ms
5,248 KB
testcase_24 AC 5 ms
5,248 KB
testcase_25 AC 4 ms
5,248 KB
testcase_26 AC 4 ms
5,248 KB
testcase_27 AC 5 ms
5,248 KB
testcase_28 AC 4 ms
5,248 KB
testcase_29 AC 4 ms
5,248 KB
testcase_30 AC 15 ms
5,248 KB
testcase_31 AC 17 ms
5,276 KB
testcase_32 AC 17 ms
5,308 KB
testcase_33 AC 4 ms
5,248 KB
testcase_34 AC 4 ms
5,248 KB
testcase_35 AC 1 ms
5,248 KB
testcase_36 AC 1 ms
5,248 KB
testcase_37 AC 1 ms
5,248 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

fn read() -> (Vec<u32>, Vec<Vec<usize>>) {
    let mut s = String::new();
    use std::io::Read;
    std::io::stdin().read_to_string(&mut s).unwrap();
    let mut it = s.trim().split_whitespace();
    let mut next = || it.next().unwrap().parse::<usize>().unwrap();
    let n = next();
    let q = next();
    let a = (0..n).map(|_| next() as u32).collect::<Vec<_>>();
    let ask = (0..q)
        .map(|_| {
            let m = next();
            (0..m).map(|_| next()).collect::<Vec<_>>()
        })
        .collect::<Vec<_>>();
    (a, ask)
}

fn main() {
    let (a, ask) = read();
    let n = a.len();
    let q = ask.len();
    let mut query = vec![vec![]; a.len()];
    for (i, mut ask) in ask.into_iter().enumerate() {
        ask.insert(0, 0);
        ask.push(a.len());
        for a in ask.windows(2) {
            let (l, r) = (a[0], a[1]);
            query[l].push((r, i));
        }
    }
    const MOD: u64 = 1_000_000_007;
    let mut pow = vec![1; n + 1];
    for i in 1..=n {
        pow[i] = 2 * pow[i - 1] % MOD;
    }
    let mut ans = vec![1; q];
    let mut index = [(n, 0); 32];
    for (l, (a, query)) in a.iter().zip(query.iter()).enumerate().rev() {
        let mut q = (l, *a);
        for (j, p) in index.iter_mut().enumerate() {
            if q.1 >> j & 1 == 0 {
                continue;
            }
            if p.0 == n {
                *p = q;
                break;
            }
            if q.0 < p.0 {
                std::mem::swap(&mut q, p);
            }
            q.1 ^= p.1;
        }
        for &(r, k) in query.iter() {
            ans[k] = ans[k] * pow[r - l - index.iter().filter(|x| x.0 < r).count()] % MOD;
        }
    }
    use std::io::Write;
    let out = std::io::stdout();
    let mut out = std::io::BufWriter::new(out.lock());
    for a in ans {
        writeln!(out, "{}", a).ok();
    }
}
0