代码如下:
#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;
}

京公网安备 11010502036488号