Pagini recente » Borderou de evaluare (job #521702) | Borderou de evaluare (job #2450752) | Borderou de evaluare (job #2906165) | Borderou de evaluare (job #2121793) | Cod sursa (job #2412288)
#include <fstream>
#include <cmath>
const int NMAX=100005;
using namespace std;
int v[NMAX];
int pref[NMAX];
ifstream cin ("numarare.in");
ofstream cout ("numarare.out");
int main() {
int n;
cin>>n;
for(int i=1; i<=n; ++i)
cin>>v[i];
int r=0,c=0;
long long sol=n-1;
for(int i=1; i<n; ++i) {
if(i>r) {
while(i-pref[i]>0 && i+pref[i]+1<=n && v[i+pref[i]+1]+v[i-pref[i]]==v[i]+v[i+1])
++pref[i];
}
else {
int leftover=min(pref[2*c-i],r-i);
pref[i]=leftover;
while(i-pref[i]>0 && i+pref[i]+1<=n && v[i+pref[i]+1]+v[i-pref[i]]==v[i]+v[i+1])
++pref[i];
}
--pref[i];
if(i+pref[i]+1>r) {
r=i+pref[i]+1;
c=i;
}
sol+=pref[i];
}
cout<<sol<<'\n';
return 0;
}