Pagini recente » Cod sursa (job #3232416) | Cod sursa (job #2594291) | Cod sursa (job #1541686) | Cod sursa (job #1616959) | Cod sursa (job #2411494)
#include <fstream>
#include <cmath>
const int NMAX=100014;
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=0;
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] + 1;
// cout << i << ' ' << pref[i] << '\n';
}
cout << sol << '\n';
return 0;
}