https://atcoder.jp/users/nobuchi
C: print(k*(k+1)//2 - sum([aa for aa in set(a) if aa <= k]))
C: print(k*(k+1)//2 - sum([aa for aa in set(a) if aa <= k]))
2次元いもす法
+1と-1の配置に注意。
+1は左上と右下
-1は左下と右上
あとは縦横の累積和を順番に取る
左上以降のすべての長方形に雪が降ることを考えて、余計な部分を調整するイメージ
2次元いもす法
+1と-1の配置に注意。
+1は左上と右下
-1は左下と右上
あとは縦横の累積和を順番に取る
左上以降のすべての長方形に雪が降ることを考えて、余計な部分を調整するイメージ
二次元累積和
"縦の累積和を取ったもの"を更に横の累積和を取る。
これを(右下-右上-左下+左上)
累積和の配列を作るときには上と左に0の行列を被せておく
二次元累積和
"縦の累積和を取ったもの"を更に横の累積和を取る。
これを(右下-右上-左下+左上)
累積和の配列を作るときには上と左に0の行列を被せておく
O(N^3)かと思ったら3つのカードのうち2つの数字だけ定めれば3つ目の数字が求まるのでO(N^2)で全探索可能
O(N^3)かと思ったら3つのカードのうち2つの数字だけ定めれば3つ目の数字が求まるのでO(N^2)で全探索可能