左右绝对值取中间。
ac代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long int LL ;
const int N = 1e5 + 10;
LL a[N];
int cnt = 0 ;
int main()
{
int t;
cin >> t;
while(t--)
{
int n ;
cin >> n ;
cnt = 0 ;
LL x = 0 ;
for(int i = 1; i <= n ; i ++)
{
cin >> x;
if(!cnt)
{
a[++cnt] = x;
}
else
{
if(x == -1)
{
if(a[cnt] == -1)continue;
else a[++cnt] = x;
}
else a[++cnt] = x;
}
}
n = cnt;
LL l = 1e9 + 10;
LL r = -l;
if(cnt == 1)
{
cout << 0 <<' '<< 0 <<endl;
continue;
}
for(int i = 1; i <= n ; i ++)
{
if(a[i] == -1)
{
if(i == 1)
{
l = min(l,a[i+1]);
r = max(r,a[i+1]);
}
else if(i == n)
{
l = min(l,a[i-1]);
r = max(r,a[i-1]);
}
else
{
l = min(l,min(a[i+1],a[i-1]));
r = max(r,max(a[i+1],a[i-1]));
}
}
}
LL k = l + r >> 1;
// for(int i = 1; i <= n ; i ++)
// {
// cout << a[i] <<" \n"[i == n];
// }
int maxd = 0 ;
for(int i = 1; i <= n ; i ++)if(a[i] == -1)a[i] = k ;
for(int i = 2; i <= n ; i ++)
{
if(abs(a[i] - a[i-1]) > maxd)maxd = abs(a[i] - a[i-1]);
}
cout << maxd <<' '<<k <<endl;
}
return 0;
}