Pagini recente » Cod sursa (job #2432159) | Monitorul de evaluare | Cod sursa (job #1148703) | Cod sursa (job #2125107) | Cod sursa (job #2217880)
#include <bits/stdc++.h>
using namespace std;
int v[100010],d[100010];
int main()
{
freopen("numarare.in","r",stdin);
freopen("numarare.out","w",stdout);
int n;
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];
n--;
int poz=0,l=0;
for(int i=1;i<=n;i++)
{
if(d[i]+i<poz+l) d[i]=min(poz+l-i,d[2*poz-i]);
if(d[i]+i>=poz+l) while(i+d[i]<n && i-d[i]>1 && v[i+d[i]+1]==v[i-d[i]-1]) d[i]++;
if(i+d[i]>poz+l) {poz=i;l=d[i];}
}
long long sol=0;
for(int i=1;i<=n;i++) sol+=d[i]+1;
printf("%lld",sol);
return 0;
}