排序+O(n)扫一遍。 注意 Aj<Ai and Bi<Bj 没有等号哦!!!!! 133. 边界 时间限制: 0.50 sec 空间限制: 4096 KB 在A和B的边界出有N个前哨站。对于每一个前哨站 k,他的管辖范围[Ak,Bk]是已知的。由于经济原因,A国总统决定减少一些前哨站。多余的前哨站都会被抛弃。我们定义i号前哨站是多余的如果存在另一个前哨战j满足 Aj<Ai 且 Bi<Bj。你的任务是计算多余的前哨站个数。 输入 第一行是整数N (1<=N<=16 000)。接下来N行每行包含2个整数: Ak 和 Bk (0<=Ak<Bk<=2 000 000 000), 空格隔开。所有的 Ak 都是不同的, 所有的 Bk 也是不同的。 输出 输出多余的前哨站个数 。 样例输入 50 102 93 81 156 11 样例输出 3 #include <iostream> #include <algorithm> using namespace std; struct node { int x; int y; }; bool cmp(node a, node b) { if(a.x < b.x) return true; if(a.x > b.x) return false; return a.y > b.y; } int main() { int n; scanf("%d", &n); node a[20000]; for(int i = 1; i <= n; i++) scanf("%d %d", &a[i].x, &a[i].y); sort(a+1, a+1+n, cmp); int tot = 0; int maxy = a[1].y, lastx = a[1].x; for(int i = 2; i <= n; i++) { if(a[i].x != lastx) { lastx = a[i].x; if(maxy > a[i].y) tot++; else maxy = a[i].y; } } cout << tot << endl; return 0; }