はまやんはまやんはまやん

hamayanhamayan's blog

競技プログラミングにおける半環問題まとめ

半環

半環一覧

(集合,+演算子,*演算子)
1. (整数,+,*)
2. (整数,xor,and)
3. (整数,max,+)
4. (行列,+,*)

考え方と注意

  • 漸化式を上手く作れればある線形写像が独立にマージできる (セグメントツリー)
  • 漸化式をとにかく上手く作る
  • 複数のパラメタを用いて順番に更新するような問題でパラメタが更新されるようなクエリがあっても、部分的に修正、高速に計算ができる
  • セグメントツリーで計算する時に順番に注意
  1. 既存のセグメントツリーライブラリを使うのは良いが、順番通りに計算してくれていることを確認
  • 行列累乗が使える条件として利用する場合もある
    • この問題
    • この問題では行列にmax(w+a,b)を乗せるという問題
    • これはf(w)=max(w+a,b)として遷移関数を定義して解いている
    • すると、合成関数(積)はmax(w+a+c,max(d+a,b))であり、和はmax(w + max(a,c), max(b,,d))となる

以下問題集

1. (整数,+,*)

ARC 008 D. タコヤキオイシクナール

http://arc008.contest.atcoder.jp/tasks/arc008_4

2. (整数,xor,and)

3. (整数,max,+)