点(x, y)がN個ある時に長方形区間の点の数を数える問題
- とする
特に各点について を計算する場合
-
素朴にループで書くとO(N^2)なのでNが大きい時に工夫が必要
-
- xでソートしてそれを時間軸にする
-
- yを定義域にする
-
x < x0がすべて追加されている状態でy < y0を満たすものの数が分かれば良い
- 定義域をy、値域を出現回数とすればsumで求まる
-
同じxの点がある場合、事前にxでグループ化して、sumをし終わってからaddする必要がある python
# grouping
from collections import defaultdict
P2 = defaultdict(list)
for i in range(M):
x, y = PS[i]
P2[y - 1].append(x - 1)
bit_init(H + 1)
for y in range(0, y0):
ret += bit_sum(x0)
for x in P2[y]:
bit_add(x, 1)