2 条题解

  • 4
    @ 2025-11-16 23:31:53
    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
    上传者