Pagini recente » Cod sursa (job #3223537) | Cod sursa (job #3122197) | Cod sursa (job #3255695) | Cod sursa (job #776571) | Cod sursa (job #468386)
Cod sursa(job #468386)
#include <stdio.h>
#define min(a, b) (a) < (b) ? (a) : (b)
#define MAX_N 100010
int A[MAX_N], d[MAX_N], lun[MAX_N];
int main() {
int n, i, st, dr;
freopen("numarare.in", "r", stdin);
freopen("numarare.out", "w", stdout);
scanf("%d", &n);
scanf("%d", &A[1]);
for (i = 2; i <= n; i++) {
scanf("%d", &A[i]);
d[i - 1] = A[i] - A[i - 1];
lun[i - 1] = 1;
}
long long rez = 0;
int mid = 1, right = 1;
for (i = 1; i < n; i++) {
if (right > i)
lun[i] = min(lun[mid - (i - mid)], right - i + 1);
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;
}
rez = rez + lun[i];
}
printf("%lld\n", rez);
return 0;
}