题解怎么了
  • 板块学术版
  • 楼主qhy_
  • 当前回复14
  • 已保存回复14
  • 发布时间2021/3/7 16:39
  • 上次更新2023/11/5 02:20:27
查看原帖
题解怎么了
321290
qhy_楼主2021/3/7 16:39

我这样的写的

```cpp
#include <algorithm>
#include <iostream>
 
using namespace std;
 
const int kMaxN = 1e5 + 1;
 
struct E { 
  int x, y;
  bool operator<(const E &e) const {  // 先x后y排序
    return x < e.x || (x == e.x && y < e.y);
  }
} e[kMaxN];

int s[kMaxN] = {1 << 30};  // 初始化边界
int n, t;

int main() {
  //freopen("moop.in", "r", stdin);
  //freopen("moop.out", "w", stdout);
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> e[i].x >> e[i].y;
  }
  sort(e + 1, e + 1 + n);
  for (int i = 1; i <= n; i++) {
    if (e[i].y < s[t]) {  // 遇到更低点则记录
      s[++t] = e[i].y;
    } else {
      for (; t > 1 && e[i].y >= s[t - 1]; t--) {  // 将可以合并的点合并,留下最低点
        s[t - 1] = s[t];
      }
    }
  }
  cout << t;
  return 0;
}
\```

但是产生了这样的效果

2021/3/7 16:39
加载中...