CF1834D Survey in Class
/* 极差是 两个数的最大值 1.>>>>> <><><><> <<<<<< / <<<<<<< <><><><><> >>>>>> 2*(max(L1,L2)-com_lenth) 2.>>>> <><><> >>>>>> 2*|L1-L2| 3.>>>>>>>> <<<<<<<<< 2*|L1-L2| 只有三种情况 O(n^2) 对于每一个 区间 枚举n个 按照三种情况判断 取最大值 显然超出范围 n,m<=1e5 T<=1e4 考虑 O(n) 或者 O(n*logn) 优化: 1/贪心: (1)对于每一个区间 从前往后扫 只要 com_length 尽量小就可以了 ->maxl +minr (2) |L1-L2| 记录最小值即可 -> minlen 因为有可能不重叠 所以 max( ,0) ans = max(ans, a[i].r - a[i].l + 1 - min(max(a[i].r - maxl + 1, 0), min(max(minr - a[i].l + 1, 0), minlen))); */ #include<cstdio> #include<iostream> #include<algorithm> #include<cmath> #include<string.h> //#include<queue> //#include<vector> //#include<bits/stdc++.h> #define ll long long #define ddd printf("-----------------------\n"); using namespace std; typedef pair<int,int> pii; const int N = 114514; #define l first #define r second pii a[N]; int main() { int T, n, m; cin >> T; while(T--){ cin >> n >> m; for(int i = 1; i <= n; i++) cin >> a[i].l >> a[i].r; int maxl = 0, minr = 2e9, minlen = 2e9; for(int i = 1; i <= n; i++) maxl = max(maxl, a[i].l), minr = min(minr, a[i].r), minlen = min(minlen, a[i].r - a[i].l + 1); int ans = 0; for(int i = 1; i <= n; i++) ans = max(ans, a[i].r - a[i].l + 1 - min(max(a[i].r - maxl + 1, 0), min(max(minr - a[i].l + 1, 0), minlen))); cout << ans * 2 << endl; } return 0; }