Pagini recente » Cod sursa (job #3141283) | Cod sursa (job #116283) | Cod sursa (job #1492222) | Cod sursa (job #3256055) | Cod sursa (job #2460498)
#include<bits/stdc++.h>
using namespace std;
int dp[100006],v[100006],dif[100006];
int main ()
{
ifstream cin("numarare.in");
ofstream cout("numarare.out");
int n,l=1,r=1,st,dr,c;
cin>>n;
for(int i=1;i<=n;i++)
cin>>v[i];
for(int i=1;i<n;i++)
dif[i]=v[i]-v[i+1];
dp[1]=1;
for(int i=2;i<n;i++)
if(i>r)
{
dp[i]=1;
st=i-1;
dr=i+1;
while(dif[st]==dif[dr] and st>0 and dr<n)
{
dp[i]++;
st--;
dr++;
}
l=st+1;
r=dr-1;
}
else
{
c=(l+r)/2;
if(dp[2*c-i]<=r-i)
{
dp[i]=min(dp[2*c-i],n-i);
continue;
}
dp[i]=r-i+1;
st=i-dp[i];
dr=i+dp[i];
while(dif[st]==dif[dr] and st>0 and dr<n)
{
dp[i]++;
st--;
dr++;
}
l=st+1;
r=dr-1;
}
long long s=0;
for(int i=1;i<n;i++)
s+=dp[i];
cout<<s;
return 0;
}