Open7

競技プログラミングメモ

ウチコウチコ

★4までの問題 44問

https://atcoder.jp/contests/typical90/tasks/typical90_a
https://atcoder.jp/contests/typical90/tasks/typical90_b
https://atcoder.jp/contests/typical90/tasks/typical90_c
https://atcoder.jp/contests/typical90/tasks/typical90_d
https://atcoder.jp/contests/typical90/tasks/typical90_g
https://atcoder.jp/contests/typical90/tasks/typical90_h
https://atcoder.jp/contests/typical90/tasks/typical90_j
https://atcoder.jp/contests/typical90/tasks/typical90_l
https://atcoder.jp/contests/typical90/tasks/typical90_n
https://atcoder.jp/contests/typical90/tasks/typical90_p
https://atcoder.jp/contests/typical90/tasks/typical90_r
https://atcoder.jp/contests/typical90/tasks/typical90_t
https://atcoder.jp/contests/typical90/tasks/typical90_v
https://atcoder.jp/contests/typical90/tasks/typical90_x
https://atcoder.jp/contests/typical90/tasks/typical90_z
https://atcoder.jp/contests/typical90/tasks/typical90_aa
https://atcoder.jp/contests/typical90/tasks/typical90_ab
https://atcoder.jp/contests/typical90/tasks/typical90_af
https://atcoder.jp/contests/typical90/tasks/typical90_ag
https://atcoder.jp/contests/typical90/tasks/typical90_ah
https://atcoder.jp/contests/typical90/tasks/typical90_al
https://atcoder.jp/contests/typical90/tasks/typical90_ap
https://atcoder.jp/contests/typical90/tasks/typical90_aq
https://atcoder.jp/contests/typical90/tasks/typical90_ar
https://atcoder.jp/contests/typical90/tasks/typical90_at
https://atcoder.jp/contests/typical90/tasks/typical90_av
https://atcoder.jp/contests/typical90/tasks/typical90_ax
https://atcoder.jp/contests/typical90/tasks/typical90_az
https://atcoder.jp/contests/typical90/tasks/typical90_bc
https://atcoder.jp/contests/typical90/tasks/typical90_bf
https://atcoder.jp/contests/typical90/tasks/typical90_bi
https://atcoder.jp/contests/typical90/tasks/typical90_bk
https://atcoder.jp/contests/typical90/tasks/typical90_bl
https://atcoder.jp/contests/typical90/tasks/typical90_bo
https://atcoder.jp/contests/typical90/tasks/typical90_bq
https://atcoder.jp/contests/typical90/tasks/typical90_br
https://atcoder.jp/contests/typical90/tasks/typical90_bt
https://atcoder.jp/contests/typical90/tasks/typical90_bw
https://atcoder.jp/contests/typical90/tasks/typical90_bx
https://atcoder.jp/contests/typical90/tasks/typical90_bz
https://atcoder.jp/contests/typical90/tasks/typical90_ca
https://atcoder.jp/contests/typical90/tasks/typical90_cd
https://atcoder.jp/contests/typical90/tasks/typical90_cf
https://atcoder.jp/contests/typical90/tasks/typical90_cg

ウチコウチコ

https://atcoder.jp/contests/typical90/tasks/typical90_al

最小公倍数は
a x b / gcd(a,b)

オーバーフローに注意。
10^18 なら long long で収まるので、計算結果がオーバーフローにならないように注意。
計算結果が 10^18 より大きい数値になるかならないかの判定は以下の手順。

  1. b / gcd(a, b) を求める。
  2. 1.の値が 10^18 / a よりも大きい場合は、10^9以上の数値のなるので Large。
ウチコウチコ

セグメント木

セグメント木でできること

  • 区間上の値を更新する
  • 任意の区間上の最小値や合計値を取得する

セグメント木のクエリ

  • 区間変更クエリ:加算、更新
  • 区間取得クエリ:最小値、最大値、和

モノイドとAtCoderのlazy_segtree

セグメント木に載せられるのは モノイド

結合則:X の任意の元 𝑎,𝑏,𝑐 について、𝑎•(𝑏•𝑐)=(𝑎•𝑏)•𝑐
単位元 e の存在:Mの任意の元 a について、𝑒•𝑎=𝑎•𝑒=𝑎 を満たす X の元 e が存在する

https://algo-logic.info/segment-tree/#toc_id_6

AtCoder LibraryのLazy Segtree。
https://atcoder.github.io/ac-library/document_ja/lazysegtree.html

以下は、区間変更クエリ:更新、区間取得クエリ:最大値の場合の設定。

  • モノイドの型 S
    • int
  • S×S→S を計算する関数 S op(S a, S b)
    • S op(S a, S b) { return max(a, b); }
  • e を返す関数 S e()
    • S e() { return -INF; }
  • 写像の型 F
    • int
  • f(x) を返す関数 S mapping(F f, S x)
    • S mapping(F f, S x) { return max(f, x); }
  • f∘g を返す関数 F composition(F f, F g)
    • F composition(F f, F g) { return max(f, g); }
  • id を返す関数 F id()
    • F id() { return 0; }

参考

https://algo-logic.info/segment-tree/#toc_id_6
https://betrue12.hateblo.jp/entry/2020/09/23/005940