ABC462 C - Not Covered Points
非被覆点
考え方
まず、愚直に解くと、各点 $i$ に対して他の $N-1$ 個の位置全てを確認しなくてはならない。
すると、計算量が $O(N^2)$ となり、$N = 3 \times 10^5$ ではTLEする。
よって、これを高速化する。
実は、各点の番号が何番なのかは、考える必要がない。
よって、$X$ の値が小さい順に並べなおして考えることができる。
特に今回は $X$ が $1$ から $N$ までの順列なので、$X=i$ であるものを $i$ 番目にもってくればよい。
すると、問題の長方形条件は、自分より前に自分より $Y$ が小さい点が存在しないことと言い換えられる。
($Y$ も順列なので同じ値が複数回来ることはなく、「以下」でも「未満」でもよい)
この書き換えにより、他の点を全部調べなくても今までの最小値との比較で済み、$O(N)$ で解ける。
入力例1での動作
入力を受け取る。
n: 3
(x, y): {(2, 1), (1, 3), (3, 2)}
$X$ が小さい順に点を並べると、次の順になる。
| $X$ | $Y$ | 元の点番号 |
|---|---|---|
| $1$ | $3$ | $2$ |
| $2$ | $1$ | $1$ |
| $3$ | $2$ | $3$ |
左から順に見て、これまでに見た $Y$ の最小値より小さい点を数える。
| $X$ | $Y$ | それ以前の $Y$ の最小値 | 条件を満たすか | ここまでの個数 |
|---|---|---|---|---|
| $1$ | $3$ | なし | 満たす | $1$ |
| $2$ | $1$ | $3$ | 満たす | $2$ |
| $3$ | $2$ | $1$ | 満たさない | $2$ |
条件を満たすのは元の点 $1,2$ の $2$ 個なので、答えは $2$ となる。
注意点
特になし。
別解
特になし。