Pagini recente » Cod sursa (job #3205962) | Cod sursa (job #2864225) | Cod sursa (job #2762109) | Cod sursa (job #70361) | Cod sursa (job #479665)
Cod sursa(job #479665)
#include <cstdio>
#include <algorithm>
const int maxN = 100100;
using namespace std;
int V[maxN], D[maxN], lung[maxN];
int st, dr, right, mid, sol;
int N;
int main() {
int i;
freopen("numarare.in", "r", stdin);
freopen("numarare.out", "w", stdout);
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;
lung[1] = 1;
for (i = 1; i < N; i++) {
if (right >= i)
lung[i] = 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] > right) {
right = i + lung[i];
mid = i;
}
if (D[st] == D[dr]) {
st--;
dr++;
lung[i]++;
}
else
break;
}
sol += lung[i];
}
printf("%d\n", sol);
return 0;
}