Cod sursa(job #1232100)

Utilizator tudormaximTudor Maxim tudormaxim Data 22 septembrie 2014 00:16:48
Problema Numarare Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#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;
}