看到最大值,就以为是用二分。但是一直超时。
主要是自己solve的方式不对,每次solve都要0n2,来判断是否有大于当前mid的距离。得不偿失。。
一开始暴力写,没有考虑先后顺序,,其实再改动一下就对了。。
哎,too young too naive。。
问题要分析清楚,套路才耍的号。。
两种情况,一种是象棋在前,另一种
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
typedef long long ll;
using namespace std;
ll a[200006];
ll b[200006];
ll a1[200006];
ll b1[200006];
int main()
{ int m,n;
scanf("%d",&m);
for(int i=0;i<m;i++)
{ scanf("%lld%lld",&a1[i],&a[i]);
}
sort(a,a+m);
sort(a1,a1+m);
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%lld%lld",&b[i],&b1[i]);
sort(b,b+n);
sort(b1,b1+n);
ll mm=max(a1[m-1]-b1[0],b[n-1]-a[0]);
if(mm<=0)
printf("0\n");
else
printf("%lld\n",mm);
return 0;
}