Macro mo_algorithm

Source
macro_rules! mo_algorithm {
    (
        $lr:expr,
        ($l:ident, $r:ident),
        |$i:tt| $inc:expr,
        |$d:tt| $dec:expr,
        |$a:tt| $answer:expr $(,)?
    ) => { ... };
    (
        $lr:expr,
        ($l:ident, $r:ident),
        |$il:tt| $incl:expr,
        |$dl:tt| $decl:expr,
        |$ir:tt| $incr:expr,
        |$dr:tt| $decr:expr,
        |$a:tt| $answer:expr $(,)?
    ) => { ... };
}
Expand description

solve with Mo’s algorithm

arg:

  • lr: slice of pair of usize
  • (l, r): ident of current pair
  • incl: |i| expr: del i, l+=1 (post)
  • decl: |i| expr: add i, l-=1 (pre)
  • incr: |i| expr: add i, r+=1 (post)
  • decr: |i| expr: del i, r-=1 (pre)
  • answer: |i| expr: answer i-th pair of lr

incr and decr can be omitted, if simultaneous