https://ac.nowcoder.com/acm/contest/877/J
题意:求
的最大值。
直接展开,对于ai^2和i^2有++ +- -+ --这四种情况,然后存一下最大值,枚举i更新答案和最大值。
#include <bits/stdc++.h>
using namespace std;
#define LL long long
const int max_n = 1e6+6;
LL a[max_n];
int main(){
int T;scanf("%d",&T);while(T--){
int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
LL mi[5]; //++ +- -+ --
LL ans=0;
mi[1]=1LL*a[1]*a[1]+1LL*1;
mi[2]=1LL*a[1]*a[1]-1LL*1;
mi[3]=-1LL*a[1]*a[1]+1LL*1;
mi[4]=-1LL*a[1]*a[1]-1LL*1;
for(int i=2;i<=n;i++){
LL x;
x=1LL*a[i]*a[i]+1LL*i*i;
ans=max(ans,x+mi[4]);
x=1LL*a[i]*a[i]-1LL*i*i;
ans=max(ans,x+mi[3]);
x=-1LL*a[i]*a[i]+1LL*i*i;
ans=max(ans,x+mi[2]);
x=-1LL*a[i]*a[i]-1LL*i*i;
ans=max(ans,x+mi[1]);
mi[1]=max(mi[1],1LL*a[i]*a[i]+1LL*i*i);
mi[2]=max(mi[2],1LL*a[i]*a[i]-1LL*i*i);
mi[3]=max(mi[3],-1LL*a[i]*a[i]+1LL*i*i);
mi[4]=max(mi[4],-1LL*a[i]*a[i]-1LL*i*i);
}
printf("%lld\n",ans);
}
return 0;
}