Pagini recente » Cod sursa (job #1901931) | Rating Budin Cristian (CristianBudin) | Cod sursa (job #971664) | Cod sursa (job #1170353) | Cod sursa (job #545744)
Cod sursa(job #545744)
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int lung[101010];
int v[101010],N,st,dr,q;
int main()
{
freopen("numarare.in","r",stdin);
freopen("numarare.out","w",stdout);
scanf("%d",&N);
for(int i=1;i<=N;++i)
{
scanf("%d",&v[i]);
}
N--;
for(int i=1;i<=N;++i)
v[i]-=v[i+1];
lung[1]=0;
st=1;
dr=1;
for(int i=2;i<=N;++i)
{
// printf("%d",v[i]);
if(i<=dr)
{
int q=st+dr-i;
lung[i]=min(lung[q],dr-i);
if(i+lung[i]==dr)
{
st=i-lung[i];
dr=i+lung[i];
while(dr<N&&st>1&&v[i-lung[i]-1]==v[i+lung[i]+1])
{
++lung[i];
--st;
++dr;
}
}
}
else
{
st=dr=i;
lung[i]=0;
while(st>1&&dr<N&&v[i-lung[i]-1]==v[i+lung[i]+1])
{
--st;
++dr;
++lung[i];
}
}
}
int S=0;
for(int i=1;i<=N;++i)
{
S+=lung[i]+1;
}
printf("%d\n",S);
}