This documentation is automatically generated by competitive-verifier/competitive-verifier
// verification-helper: PROBLEM https://judge.yosupo.jp/problem/point_set_range_composite
use proconio::input;
use modint::StaticModint;
use segment_tree::SegmentTree;
type Mint = StaticModint<998244353>;
query::define_query! {
Query {
0 => Query0(p: usize, c: u64, d: u64),
1 => Query1(l: usize, r: usize, x: u64),
}
}
fn main() {
input! {
n: usize,
q: usize,
ab: [(u64, u64); n],
queries: [Query; q],
}
let mut st = SegmentTree::<(Mint, Mint)>::new(n, |x, y| (x.0 * y.0, x.1 * y.0 + y.1), (Mint::new(1), Mint::new(0)));
let ab = ab.iter().map(|&(a, b)| (Mint::new(a), Mint::new(b))).collect::<Vec<_>>();
st.build(&ab);
for query in queries {
match query {
Query0(p, c, d) => st.set(p, (Mint::new(c), Mint::new(d))),
Query1(l, r, x) => {
let (a, b) = st.prod(l, r);
println!("{}", Mint::new(x) * a + b);
}
}
}
}
| Env | Name | Status | Elapsed | Memory |
|---|---|---|---|---|
| Rust | example_00 |
|
6 ms | 2 MB |
| Rust | max_random_00 |
|
605 ms | 49 MB |
| Rust | max_random_01 |
|
597 ms | 49 MB |
| Rust | max_random_02 |
|
621 ms | 49 MB |
| Rust | max_random_03 |
|
610 ms | 49 MB |
| Rust | max_random_04 |
|
615 ms | 50 MB |
| Rust | random_00 |
|
489 ms | 43 MB |
| Rust | random_01 |
|
555 ms | 46 MB |
| Rust | random_02 |
|
365 ms | 18 MB |
| Rust | random_03 |
|
91 ms | 33 MB |
| Rust | random_04 |
|
143 ms | 30 MB |
| Rust | small_00 |
|
6 ms | 2 MB |
| Rust | small_01 |
|
6 ms | 2 MB |
| Rust | small_02 |
|
6 ms | 2 MB |
| Rust | small_03 |
|
6 ms | 2 MB |
| Rust | small_04 |
|
6 ms | 2 MB |