我这样的写的
```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;
}
\```
但是产生了这样的效果
