código: (No es del todo correcto, mi idea es encontrar la posición de dos signos diferentes de 2 —— n-1. Si el resultado de reemplazo puede hacer que AbsMax sea más pequeño, cámbielo, de lo contrario no lo cambie);
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int max=0;
int getAbsMax(int a,int b,int c){
a=abs(a);
b=abs(b);
c=abs(c);
int ans=a;
if(b>ans)ans=b;
if(c>ans)ans=c;
return ans;
}
int check(int *a,int n){
for(int i=1;i<=n-2;i++){
if(a[i]*a[i-1]<0||a[i]*a[i+1]<0){
int num1=a[i-1];
int num2=a[i];
int num3=a[i+1];
if(a[i]>0){
num1-=num2;
num3-=num2;
num2=-num2;
int eee=getAbsMax(num1,num2,num3);
if(eee<max){
a[i-1]=num1;
a[i]=num2;
a[i+1]=num3;
max=eee;
return 1;
}
}else{
num1+=num2;
num3+=num2;
num2=-num2;
int eee=getAbsMax(num1,num2,num3);
if(eee<max){
a[i-1]=num1;
a[i]=num2;
a[i+1]=num3;
max=eee;
return 1;
}
}
}
}
return 0;
}
int main(){
int T;
scanf("%d",&T);
for(int i=0;i<T;i++){
max=0;
int n;
scanf("%d",&n);
int a[n];
for(int j=0;j<n;j++){
scanf("%d",&a[j]);
}
for(int i=0;i<n;i++){
if(abs(a[i])>max){
max=abs(a[i]);
}
}
while(check(a,n)==1){
}
printf("%d\n",max);
}
return 0;
}