僕が知ってると楽だと思うもの。C++(g++)使ってる人向け。いろいろなのごちゃごちゃまぜまぜしてます。大きい配列グローバル配列として宣言しないと謎のセグフォします。ローカル変数で確保すると、[1000][1000]でもうセグフォしちゃったりするので注意。(JOI予選・本選共にそれで苦しんだ人が少なくなかったようです。)配列を多めに確保しよう少し余分に取ることで残念バグとかで死にません。切り上げcmathのクラスのceil()関数を使ってもよいが、A/Bを切り上げたい時、「(A+B-1)/B」で切り上げられる。ビットを数える__builtin_popcount(n)もうわざわざ実装する必要はありません!最大公約数・最小公倍数求める#include ヘッダの__gcd(a,b)を使うと良いです。a,bの最小公倍数はa/__gcd(a,b)*bとかでやると算術オーバーフローしなくてグッドです。