#include using namespace std; using LL = long long; #define endl '\n' using db = double; template using max_heap = priority_queue; template using min_heap = priority_queue, greater>; vector manacher(vector &s) { int n = s.size(); vector d1(n); for (int i = 0, l = 0, r = -1; i < n; i++) { // cerr << "i = " << i << " l = " << l << " r = " << r << endl; int k = (i > r) ? 1 : min(d1[l + r - i], r - i + 1); while (0 <= i - k && i + k < n && s[i - k] == s[i + k]) { k++; } d1[i] = k--; if (i + k > r) { l = i - k; r = i + k; } } return d1; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; assert(n >= 1); assert(n <= 1e6); vector a(n); for (int i = 0; i < n; ++i) { cin >> a[i]; assert(1 <= a[i] && a[i] <= 1e9); } vector B(n * 2, 1e18); for (int i = 1; i < n; ++i) { B[i * 2 - 2] = a[i] - a[i - 1]; } LL ans = 0; auto ma = manacher(B); for (int i = 0; i < n * 2 - 3; i += 2) ans += (ma[i] + 1) / 2; for (int i = 1; i < n * 2 - 3; i += 2) ans += (ma[i]) / 2; cout << ans + n << endl; return 0; }