Pagini recente » Cod sursa (job #880820) | Cod sursa (job #1806372) | Cod sursa (job #173692) | Cod sursa (job #830645) | Cod sursa (job #2016473)
#include <bits/stdc++.h>
using namespace std;
const int maxN=1e5+4;
int n,sol;
int manacher[maxN];
int v[maxN],diff[maxN];
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++)
diff[i]=v[i+1]-v[i];
int idx=0,center=0;
for(int i=1;i<n;i++)
{
if(i<=idx)
manacher[i]=min(idx+1-i,manacher[center-(i-center)]);
while(i+manacher[i]<n && i-manacher[i]>0 &&diff[i+manacher[i]]==diff[i-manacher[i]])
manacher[i]++;
if(i+manacher[i]-1>idx){
idx=i+manacher[i]-1;
center=i;
}
sol+=manacher[i];
}
printf("%d",sol);
return 0;
}