【AtCoder】ABC 462 C - Not Covered Points
AtCoder/ABC/C問題AtCoder/ABC/300点問題AtCoder/灰DiffAtCoder/NoviSteps/2QAtCoder/数学/図形/座標幾何AtCoder/数学/順列競技プログラミング

C - Not Covered Points
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
AtCoder
実行時間制限: 2 sec / メモリ制限: 1024 MiB / Difficulty: 298 / NoviSteps: 2Q / 配点: 300 点
問題概要
次元平面上に 個の点があり、点 の座標は である。 ここで、 はそれぞれ の順列であることが保証される。
左下の頂点を 、右上の頂点を とする 軸に平行な辺と 軸に平行な辺のみからなる長方形の内部(辺上を含まない)に、 個の点をどれも含まないような の個数を求めよ。
制約
- はそれぞれ の順列
- 入力される値は全て整数
考察
が条件を満たさない条件は、
- かつ を満たす が存在すること
である。
つまり、 座標が小さい点の中に自身より 座標も小さい点があるかを判定すればよい。
座標の値は順列なので、 の順に見ていき、その時点までの最小の を持っておけば十分。
実装例
CPP
1.#include <bits/stdc++.h>2.using namespace std;3. 4.#define rep(i, start, end) for (auto i = (start); (i) < (end); (i)++)5.#define repe(i, start, end) for (auto i = (start); (i) <= (end); (i)++)6. 7.constexpr int INF = 1e+9;8. 9.template <typename T>10.inline bool chmin(T& a, T b) { return ((a > b) ? (a = b, true) : (false)); }11. 12.// ======================================== //13. 14.int main()15.{16. int N;17. cin >> N;18. vector<int> YofX(N + 1);19. rep(i, 0, N) {20. int X, Y;21. cin >> X >> Y;22. YofX[X] = Y;23. }24. 25. int Y_min = INF;26. int ans = 0;27. repe(x, 1, N) {28. int y = YofX[x];29. 30. if (y < Y_min) {31. ans++;32. }33. 34. chmin(Y_min, y);35. }36. 37. cout << ans << endl;38. 39. return 0;40.}https://atcoder.jp/contests/abc462/submissions/76630403
atcoder.jp
実装時間: 10 分
コメント
300点問題にしては比較的簡単だった。





