---
# System prepended metadata

title: ABC185 - 知見集

---

# ABC185 - 知見集

* `std::max, std::min` は `initializer_list` 型を受け取れるので積極的に使っていきたい
* `T a, b; tie(a, b) = ...; if (a > b) swap(a, b);` の代わりに `auto [a, b] = minmax(...);` とかける (C++17)

* `signed main()` は呪文 `#define int long long` のために使う
* `return puts("No") & 0;` を使えばフォーマッタを使っていても 1 行でかけるが、有意な差はあまりないし、ICPC ではあまり意味がない
* GitHub Copilot は補完機能として有用

* GNU C++ の符号付き整数型 `short, int, long, long long, int8~64_t, int_fast8~64_t, __int128_t`

* 配列の隣接要素を見るときは番兵を使用

* 配る DP はバグを減らしやすいが、貰う DP の方がバグらない問題もあるし、貰う DP にすることで高速化できることもある
* 一部の桁 DP を除くほとんど全部の DP は、全体初期化 + 一点初期化で十分

* `vector<bool>` は順番がぐちゃぐちゃなので使わない方がよい
* ICPC 用ライブラリとしてモノイド抽象セグ木を持っておこう
  * 変更部分: 型、単位元、結合関数
  * インターフェース: 点更新、点加算、区間 Fold
  * 半開区間
