二分
一个传送门肯定放终点,另一个我们用二分来求sum。
在sum之内的点不需要考虑,我们要使sum之外的点到sum的距离都小于mid,让另一个传送门可以覆盖2mid的区域
当最左端和最右端的距离小于2*mid时,就可以缩小R

#include <bits/stdc++.h>
#include <algorithm>
typedef long long ll;
using namespace std;
int a[100005];
int inf=1e9;
 int n;
bool check(int mid) {
  int l=inf,r=-inf;
  for (int i =1 ; i <=n; ++i)
    if ((abs(a[i]) > mid)) 
    {
         r=max(a[i],r);//最右边 
         l=min(a[i],l);//最左边 
    }
    if((r-l+1)/2<=mid)return 1;
    else return 0; 
}

int main() {
    int T; 
  cin>>T;
  while (T--) {
       int l, r, mid;
    cin>>n;
    for(int i = 1; i <=n; ++i)cin>>a[i];
    sort(a+1, a + n+1);
    l = 0;
    r = max(abs(a[1]),a[n]);
    int sum;
    while (l+1 < r)
    {
      mid = (l + r) >> 1;
      if (check(mid))
        r = mid-1,sum=mid;
      else
        l = mid + 1;
    }
    printf("%d\n", sum);
  }
  return 0;
}