想试一发,结果过了。。。
#include <bits/stdc++.h>
using namespace std;
const int N(2e5);
int P[N+5],D[N+5];
int dis(int x,int y) {
return abs(x-y)+abs(P[x]-P[y]);
}
int main() {
int n;scanf("%d",&n);
for (int i{1};i<=n;++i) scanf("%d",P+i),D[i]=n;
for (int i{1};i<=n;++i) {
for (int j{i+1};j-i<D[i]&&j<=n;++j)
D[i]=min(D[i],dis(i,j)),D[j]=min(D[j],dis(i,j));
for (int j{i-1};i-j<D[i]&&j>=1;--j)
D[i]=min(D[i],dis(i,j));
printf("%d ",D[i]);
}
return 0;
}