ABC462C - 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 が小さい順に、y の値を並べなおす。
vec: {3, 1, 2}
最小値記録用変数と、カウンターを用意する。
mn : INF
result: 0
$0$ 番目を見る。最小値記録更新なので、カウントを $1$ 進める。
vec: {3, 1, 2}
mn : 3
result: 1
$1$ 番目を見る。最小値記録更新なので、カウントを $1$ 進める。
vec: {3, 1, 2}
mn : 1
result: 2
$2$ 番目を見る。最小値記録ではないので、何もしない。
vec: {3, 1, 2}
mn : 1
result: 2
カウンターの値が答え。
注意点
特になし。
別解
特になし。