Pagini recente » Cod sursa (job #2655181) | Cod sursa (job #1020970) | Cod sursa (job #1522698) | Cod sursa (job #2597557) | Cod sursa (job #552670)
Cod sursa(job #552670)
#include <stdio.h>
using namespace std;
#define maxn 100010
int n, i, j, k, st, dr, cmax, drm;
int v[maxn], s[maxn];
long long sol;
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]);
for(int i=1; i<n; ++i)
{
v[i]-=v[i+1];
s[i]=1;
}
cmax=drm=1;
n--;
for(int i=1; i<=n; ++i)
{
if(drm>=i)
s[i]=s[2*cmax-i];
else
s[i]=1;
dr=i+s[i]/2;
st=i-s[i]/2;
if(dr>drm)
{
s[i]-=2*(dr-drm);
st+=dr-drm;
dr=drm;
}
while(v[st-1]==v[dr+1] && st>1 && dr<n)
{
s[i]+=2;
st--;
dr++;
}
if(dr>drm)
{
cmax=i;
drm=dr;
}
sol+=s[i]/2+1;
}
printf("%d\n", sol);
return 0;
}