D. Survey in Class
Problem - D - Codeforces
思路:题目要求的是最大值与最小值的差值最大,那么我们能够想到,一定是两个人比较得到的最大的差值,假设a与b比较得到的最大的差值,因为如果提问了这两个区间都不包含的,是没有意义的,因为都会减小相对差值是不变的,所以我们要考虑提问这两个区间之内的,而如果两个区间都有,那么会同时增加,相对差值不变,也是无意义的,那么此时问题就转化为两个区间的最大不相交的长度,假设我们选择了a中所有的数,此时b会存在三种情况
第一种:b的右边界与a的左边界相交,因为我们最后 选择所有的a中的数,为了让不相交的最大,那么我们要让b的有边界尽可能的小,这样相交的才会更少,其中有一种特殊的情况就是b整体在a的左边
第二种:b的左边界与a的有边界相交,同理我们要选择尽可能大的b的左边界,这样相交的才会更少,其中也有特殊的情况就是b整体在a的右边
第三种:b在a内,为了让不相交的尽可能的少,那么我们要选择的区间长度要尽可能的小
综上三种情况,我们只需要找到左边界最大的,与右边界最小的,区间长度最小的,然后再将这三种情况与所有的区间进行匹配,找到最大的不相交的情况
// Problem: D. Survey in Class
// Contest: Codeforces - Codeforces Round 879 (Div. 2)
// URL: https://codeforces.com/contest/1834/problem/D
// Memory Limit: 256 MB
// Time Limit: 2000 ms
#include<iostream>
#include<cstring>
#include<string>
#include<sstream>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<vector>
#include<set>
#include<unordered_map>
#include<ctime>
#include<cstdlib>
#define fi first
#define se second
#define i128 __int128
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> PII;
typedef pair<int,pair<int,int> > PIII;
const double eps=1e-7;
const int N=5e5+7 ,M=5e5+7, INF=0x3f3f3f3f,mod=1e9+7;
const long long int llINF=0x3f3f3f3f3f3f3f3f;
inline ll read() {ll x=0,f=1;char c=getchar();while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9') {x=(ll)x*10+c-'0';c=getchar();} return x*f;}
inline void write(ll x) {if(x < 0) {putchar('-'); x = -x;}if(x >= 10) write(x / 10);putchar(x % 10 + '0');}
inline void write(ll x,char ch) {write(x);putchar(ch);}
void stin() {freopen("in_put.txt","r",stdin);freopen("my_out_put.txt","w",stdout);}
bool cmp0(int a,int b) {return a>b;}
template<typename T> T gcd(T a,T b) {return b==0?a:gcd(b,a%b);}
template<typename T> T lcm(T a,T b) {return a*b/gcd(a,b);}
void hack() {printf("\n----------------------------------\n");}
int T,hackT;
int n,m,k;
PII w[N];
int s[4];
void check1() {
int r=2e9;
int id=-1;
for(int i=1;i<=n;i++) {
if(w[i].se<r) r=w[i].se,id=i;
}
s[1]=id;
}
void check2() {
int l=-2e9;
int id=-1;
for(int i=1;i<=n;i++) {
if(w[i].fi>l) l=w[i].fi,id=i;
}
s[2]=id;
}
void check3() {
int len=INF;
int id=-1;
for(int i=1;i<=n;i++) {
if(w[i].se-w[i].fi+1<len) len=w[i].se-w[i].fi+1,id=i;
}
s[3]=id;
}
void solve() {
n=read(),m=read();
for(int i=1;i<=n;i++) w[i].fi=read(),w[i].se=read();
check1();
check2();
check3();
int res=0;
for(int i=1;i<=n;i++) {
int len=w[i].se-w[i].fi+1;
for(int j=1;j<=3;j++) {
int l=max(w[i].fi,w[s[j]].fi),r=min(w[i].se,w[s[j]].se);
if(l>r) res=max(res,len*2);
else res=max(res,(len-(r-l+1))*2);
}
}
write(res,'\n');
}
int main() {
// init();
// stin();
scanf("%d",&T);
// T=1;
while(T--) hackT++,solve();
return 0;
}