代码如下:

#include<cstdio>
using namespace std;
struct node
{
    int left,right,deep;
    node(){deep=-1;}
}a[300010];
bool b[300010];
long long c;
int main()
{
    int x,n,l,r,i,j;
    bool aa;
    scanf("%d",&n);
    for(j=1;j<=n;j++)
    {
        scanf("%d",&x);
        aa=b[x]=1;
        for(i=1;i<x||i+x<=n;i++)
        {
            if(i<x&&b[x-i])
            {
                l=x-i;r=a[l].right;
                aa=0;break;
            }
            if(i+x<=n&&b[x+i])
            {
                r=x+i;l=a[r].left;
                aa=0;break;
            }
        }
        if(aa) l=0,r=300001;
        a[l].right=x,a[x].left=l;
        a[r].left=x,a[x].right=r;
        if(a[l].deep>a[r].deep) a[x].deep=a[l].deep+1;
        else a[x].deep=a[r].deep+1;
        c+=a[x].deep;
        printf("%lld\n",c);
    }
    return 0;
}