library_checker/data_structure/
range_affine_point_get.rs1use 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}