2 条题解
-
4
struct hui { int l, r; }; bool cmp(hui x, hui y) { if (x.l == y.l) { return x.r < y.r; } return x.l < y.l; } void sll() { int n; cin >> n; hui arr[n + 9] = {0}; int mi = inf; int ma = -inf; for (int i = 1; i <= n; i++) { cin >> arr[i].l >> arr[i].r; ma = max(ma, arr[i].l); mi = min(mi, arr[i].r); } if (ma > mi) { cout << "No" << '\n'; // 判断是不是相离,自己可以写几个情况看看 return; } sort(arr + 1, arr + n + 1, cmp); for (int i = 2; i <= n; i++) { if (arr[i].l != arr[i - 1].l && arr[i].r < arr[i - 1].r) { cout << "No" << '\n'; return; } // 因为我们的排序可以简单判断包含因为是先排序l, 那后面的l肯定大于等于前面的l, 首先我们可以肯定同l的情况下r是越来越大的, 所以我们只要判断l与前面不相等的情况下是不是后面的r >= 前面的r, 然后如果可以那r一直变大,就不用考虑前面的r了, 如果小于,那就出答案了,那也不用考虑前面的r了, 所以只要考虑l不同情况下的前后相邻r的大小关系; } cout << "Yes" << '\n'; } signed main() { ios::sync_with_stdio(0); cout.tie(0), cin.tie(0); int cs = 1; cin >> cs; while (cs--) { sll(); } return 0; }
信息
- ID
- 1205
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 177
- 已通过
- 18
- 上传者