C. Medium Design

原题链接

题解

假设最优解的最大值点在x,那么我们可以把所有和x无交集的线段全部删掉,抽象地感觉,从x往两边扩散,每个点覆盖的线段数越来越少,因此最小值点不是在1,就是在m
由于已知最小值点,我们把所有和最小值点有交集的线段全部删掉,这样假如最大值点和最小值点有共同线段,不改变答案,假如没有共同线段,答案加一,所以这样肯定是可以的
设两个前缀和,分别表示不与两个最小值点有交集的线段累计

code

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    cin>>t;

    while(t--)
    {
        int n,m;
        cin>>n>>m;
        map<int,int> q1,q2;
        for(int i=1;i<=n;i++)
        {
            int x,y;
            cin>>x>>y;
            if(x!=1)
            {
                q1[x]++;
                q1[y+1]--;
            }

            if(y!=m)
            {
                q2[x]++;
                q2[y+1]--;
            }
        }

        int ans=0,cnt=0;

        for(auto it:q1)
        {
            cnt+=it.second;
            ans=max(ans,cnt);
        }
        cnt=0;

        for(auto it:q2)
        {
            cnt+=it.second;
            ans=max(ans,cnt);
        }

        cout<<ans<<endl;
    }
    return 0;
}

posted @   纯粹的  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示