Pagini recente » Cod sursa (job #846195) | Cod sursa (job #187103) | Cod sursa (job #2360986) | Cod sursa (job #1709905) | Cod sursa (job #1232100)
#include <cstdio>
#include <algorithm>
#define nmax 100100
int main() {
freopen("numarare.in", "r", stdin);
freopen("numarare.out", "w", stdout);
int V[nmax], D[nmax], lung[nmax], N,st, dr, right, mid, sol, i;
scanf("%d", &N);
for (i = 1; i <= N; i++)
scanf("%d", &V[i]);
for (i = 1; i < N; i++)
D[i] = V[i] - V[i + 1];
right = mid = 1;
for (i = 1; i < N; i++) {
if (right > i)
lung[i] = std::min(lung[mid - (i - mid)], right - i + 1);
st = i - lung[i]; dr = i + lung[i];
while (st > 0 && dr < N) {
if (i + lung[i] - 1 > right) {
right = i + lung[i] - 1;
mid = i;
}
if (D[st] == D[dr]) {
st--;
dr++;
lung[i]++;
}
else break;
}
sol += lung[i];
}
printf("%d\n", sol);
return 0;
}