---
title: "AtCoder Beginner Contest 231 F(二維偏序)"
tags: 題解, 資料結構
---
https://atcoder.jp/contests/abc231/tasks/abc231_f
#### 題意
給 $N$ 個點 $(a_1, b_1), (a_2, b_2), ...$。求對於每個點 $(a_i, b_i)$,滿足 $a_j <= a_i$ 且 $b_j >= a_j$ 的點 $(a_j, b_j)$ 之個數。
#### 思路
二維偏序題,第二維逆著排序後、第一維順著排,確保該被處理的點要先被處理。
處理每個點的時候,先將點的第一維壓入樹狀數組,然後再從樹狀數組上得前綴和。由於等號成立時屬於合法的,所以對於相同第二維的點,要先全部壓入再逐一查詢。
#### Code
```python=1
def solve():
N = int(input())
A = list(map(int, input().split()))
B = list(map(int, input().split()))
v2i, _ = compress(A)
pts = defaultdict(list)
for (a, b) in zip(A, B):
pts[b].append(a)
for b in pts.keys():
pts[b].sort()
ans = 0
fenw = Fenwick(200005)
for b in sorted(list(pts.keys()), reverse=True):
for a in pts[b]: fenw.add(v2i[a], 1)
for a in pts[b]: ans += fenw.pref(v2i[a] + 1)
print(ans)
if __name__ == "__main__":
solve()
```