给定 nn 个一类区间 (l1,i,r1,i)(l1,i,r1,i)。
给定 mm 个二类区间 (l2,i,r2,i)(l2,i,r2,i)。
请你从一类区间中挑选一个区间,从二类区间中挑选一个区间。
要求,选出的两个区间之间的距离尽可能大。
请你输出最大可能距离。
关于两区间 (l1,r1)(l1,r1) 和 (l2,r2)(l2,r2) 之间的距离,我们规定:
- 如果两区间存在交集,则区间距离为 00。
- 如果两区间不存在交集,则区间距离为 |i−j||i−j| 的最小可能值,其中 l1≤i≤r1,l2≤j≤r2l1≤i≤r1,l2≤j≤r2。
输入格式
第一行包含一个整数 nn。
接下来 nn 行,每行包含两个整数 l1,i,r1,il1,i,r1,i。
再一行包含一个整数 mm。
最后 mm 行,每行包含两个整数 l2,i,r2,il2,i,r2,i。
输出格式
一个整数,表示最大可能距离。
数据范围
前三个测试点满足 1≤n,m≤101≤n,m≤10。
所有测试点满足 1≤n,m≤2×1051≤n,m≤2×105,1≤l1,i≤r1,i≤1091≤l1,i≤r1,i≤109,1≤l2,i≤r2,i≤1091≤l2,i≤r2,i≤109。
输入样例1:
3
1 5
2 6
2 3
2
2 4
6 8
输出样例1:
3
输入样例2:
3
1 5
2 6
3 7
2
2 4
1 4
输出样例2:
0
代码如下:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
int n, m;
int res = 0;
const int INF = 0x3f3f3f3f;
int nqjl = 0, nqjr = INF, mqjl = 0, mqjr = INF;
int main() {
scanf("%d", &n);
int x, y;
for(int i = 1; i <= n; i ++) {
scanf("%d%d", &x, &y);
nqjl = max(nqjl, x);
nqjr = min(nqjr, y);
}
scanf("%d", &m);
for(int i = 1; i <= m; i ++) {
scanf("%d%d", &x, &y);
mqjl = max(mqjl, x);
mqjr = min(mqjr, y);
}
if(nqjl < mqjr && mqjl < nqjr) {
printf("0");
return 0;
}
printf("%d", max(nqjl - mqjr, mqjl - nqjr));
return 0;
}