Pagini recente » Cod sursa (job #1509172) | Cod sursa (job #2694659) | Cod sursa (job #3227578) | Cod sursa (job #3186466) | Cod sursa (job #2191302)
#include <fstream>
#define Nmax 100005
using namespace std;
ifstream f("numarare.in");
ofstream g("numarare.out");
int n, a[Nmax], man[2*Nmax];
int dif[Nmax];
long long ans;
void read()
{
f >> n;
for ( int i = 1 ; i <= n ; i ++ )
f >> a[i];
}
void build()
{
for ( int i = 2 ; i <= n ; i ++ )
dif[i-1]=a[i-1]-a[i];
}
void manachers()
{
int mid=0, rgt=0;
for ( int i = 1 ; i < n ; i ++ )
{
if ( i <= rgt )
man[i]=min(rgt-i+1, man[2*mid-i]);
while ( (dif[i+man[i]]==dif[i-man[i]]) && (i-man[i]>0) && (i+man[i]<=n) )
man[i]++;
if ( i+man[i] >= rgt )
{
mid=i;
rgt=i+man[i]-1;
}
}
}
void solve()
{
for ( int i = 1 ; i <= n ; i ++ )
ans+=man[i];
g << ans;
}
int main()
{
read();
build();
manachers();
solve();
return 0;
}