Cod sursa(job #757810)
#include <fstream>
using namespace std;
int N, A[200002], D[200002];
long long result;
int main()
{
ifstream fin("numarare.in");
ofstream fout("numarare.out");
fin >> N;
for (int i = 1; i <= N; ++i)
fin >> A[2 * i - 1];
int mid = 0, last = 0;
for (int i = 2; i <= 2 * N - 1; i += 2)
{
int sizenow = 1;
if (last >= i)
sizenow = min(D[mid - (i - mid)], last - mid + 1);
sizenow = max(sizenow, 1);
if (sizenow % 2 == 0) --sizenow;
while (i - sizenow - 2 >= 1 && i + sizenow + 2 <= 2 * N - 1 && A[i - sizenow] + A[i + sizenow] == A[i - sizenow - 2] + A[i + sizenow + 2])
sizenow += 2;
if (i + sizenow > last)
mid = i, last = i + sizenow;
D[i] = sizenow;
result += (sizenow + 1) / 2;
}
fout << result << '\n';
fin.close();
fout.close();
}