求 hack,或 hack 思路也行
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+10;
int lsh[MAXN<<1],chafen[MAXN<<1],a[MAXN<<1],n,m;
struct line{
int l,r;
}li[MAXN];
int main(){
ios::sync_with_stdio(0);cin.tie(0);
int t;cin>>t;
while(t){
--t;
memset(chafen,0,sizeof(chafen));
cin>>n>>m;
int lshcnt=0;
for(int i=1;i<=n;++i){
cin>>li[i].l>>li[i].r;
lsh[++lshcnt]=li[i].l;lsh[++lshcnt]=li[i].r;
}
sort(lsh+1,lsh+lshcnt+1);
int lshn=unique(lsh+1,lsh+lshcnt+1)-(lsh+1);
int maxa=0;
for(int i=1;i<=n;++i){
li[i].l=lower_bound(lsh+1,lsh+lshn+1,li[i].l)-lsh;
li[i].r=lower_bound(lsh+1,lsh+lshn+1,li[i].r)-lsh;
chafen[li[i].l]+=1;chafen[li[i].r+1]-=1;
}
vector<int>maxap;
for(int i=1;i<=lshn;++i){
a[i]=a[i-1]+chafen[i];
if(maxa<a[i]){
maxap.clear();
maxap.push_back(i);
maxa=a[i];
}
else if(maxa==a[i]){
maxap.push_back(i);
}
}
int mina,minmina=0x3f3f3f3f;
if(lsh[1]==1&&lsh[lshn]==m){
for(int i=0;i<maxap.size();++i){
memset(chafen,0,sizeof(chafen));
for(int j=1;j<=n;++j){
if(li[j].l<=maxap[i]&&li[j].r>=maxap[i]){
chafen[li[j].l]+=1;chafen[li[j].r+1]-=1;
}
}
mina=a[1]=chafen[1];
for(int j=2;j<=lshn;++j){
a[j]=a[j-1]+chafen[j];
mina=min(mina,a[j]);
}
minmina=min(mina,minmina);
}
}
else minmina=0;
cout<<maxa-minmina<<'\n';
}
return 0;
}