Skip to main content

library_checker/data_structure/
range_affine_point_get.rs

1use competitive::prelude::*;
2use competitive::{
3    algebra::LinearAct, data_structure::DualSegmentTree, num::mint_basic::MInt998244353 as M,
4};
5
6competitive::define_enum_scan! {
7    enum Query: usize {
8        0 => Update { l: usize, r: usize, bc: (M, M) }
9        1 => Get { i: usize }
10    }
11}
12
13#[verify::library_checker("range_affine_point_get")]
14pub fn range_affine_point_get(reader: impl Read, writer: impl Write) {
15    prepare_io!(reader, writer);
16    sc!(n, q, a: [M; iter n]);
17    let mut seg = DualSegmentTree::<LinearAct<_>>::from_keys(a);
18    for _ in 0..q {
19        sc!(query: Query);
20        match query {
21            Query::Update { l, r, bc } => seg.update(l..r, bc),
22            Query::Get { i } => {
23                pp!(seg.get(i));
24            }
25        };
26    }
27}