Pagini recente » Cod sursa (job #1173033) | Cod sursa (job #3134168) | Cod sursa (job #1698167) | Cod sursa (job #1816351) | Cod sursa (job #468263)
Cod sursa(job #468263)
#include <stdio.h>
#include <algorithm>
using namespace std;
#define MAX_N 100010
int A[MAX_N], d[MAX_N], lun[MAX_N];
int main() {
freopen("numarare.in", "r", stdin);
freopen("numarare.out", "w", stdout);
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &A[i]);
if (i > 1) {
d[i - 1] = A[i] - A[i - 1];
lun[i - 1] = 1;
}
}
long long sol = 0;
int mid = 1, right = 1;
for (int i = 1; i < n; i++) {
if (right > i)
lun[i] = min(lun[mid - (i - mid)], right - i + 1);
int st = i - lun[i], dr = i + lun[i];
while (st > 0 && dr < n) {
if (i + lun[i] - 1 > right) {
right = i + lun[i] - 1;
mid = i;
}
if (d[st] == d[dr]) {
lun[i]++;
st--; dr++;
}
else break;
}
sol = sol + lun[i];
}
printf("%lld\n", sol);
return 0;
}