​题目传送门​​​ 分治思想
代码:

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
const int maxn=100000+100;

struct Node{

ll id,sum;
}node[maxn];
int tmp[maxn];

inline bool cmp(int a,int b){

return node[a].sum<node[b].sum;
}

inline ll dis(int i,int j){

return (node[i].id-node[j].id)*(node[i].id-node[j].id)+(node[i].sum-node[j].sum)*(node[i].sum-node[j].sum);
}

ll kaven(int l,int r){

if(l==r) return 1e18;
if(l+1==r) return dis(l,r);
int mid=(l+r)>>1;
ll Min=min(kaven(l,mid),kaven(mid+1,r));
int tot=0;
for(int i=l;i<=r;i++) if((ll)(i-mid)*(i-mid)<Min) tmp[tot++]=i;
sort(tmp,tmp+tot,cmp);
for(int i=0;i<tot;i++){

for(int j=i+1;j<tot && (node[tmp[i]].sum-node[tmp[j]].sum)*(node[tmp[i]].sum-node[tmp[j]].sum)<Min;j++){

Min=min(Min,dis(tmp[i],tmp[j]));
}
}
return Min;
}

int main(){

int n;
scanf("%d",&n);
node[0].sum=0;
for(int i=1;i<=n;i++) scanf("%lld",&node[i].sum),node[i].sum+=node[i-1].sum,node[i].id=i;
printf("%lld\n",kaven(1,n));
}