1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <iostream>
#include <cstdint>
#include <vector>

namespace {
	using std::ios_base, std::cin, std::cout;
	using std::vector;
	using vec_t = vector<uint64_t>;
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	uint64_t n{ 0 };
	cin >> n;
	vec_t a(n);
	uint64_t mal{ 0 }, ros{ 0 }, row{ 0 };
	for (uint64_t i = 0; i < n; ++i) {
		cin >> a[i];
		if (i > 0) {
			if (a[i - 1] < a[i]) {
				++ros;
			}
			else if (a[i - 1] > a[i]) {
				++mal;
			}
			else {
				++row;
			}
		}
	}
	uint64_t maks_szer{ 0 };
	if (row == n - 1) {
		maks_szer = n;
	}
	else if (ros == n - 1 || mal == n - 1) {
		maks_szer = 1;
	}
	uint64_t szer{ n - 1 };
	while (maks_szer == 0 && szer >= 2) {
		vec_t ak(a);
		bool pasuje = true;
		bool odczytano = false;
		for (uint64_t pocz = 0; pasuje && pocz + szer <= n; ++pocz) {
			while (pasuje && ak[pocz] > 0) {
				uint64_t dod{ 0 };
				for (uint64_t i = pocz; pasuje && i < pocz + szer; ++i) {
					if (ak[i] > 0) {
						--ak[i];
						++dod;
					}
				}
				if (dod < szer) {
					pasuje = false;
				}
				odczytano = true;
			}
		}
		uint64_t z = n - szer;
		while (z < n && ak[z] == 0) {
			++z;
		}
		if (pasuje && z < n) {
			pasuje = false;
		}
		if (pasuje && odczytano) {
			maks_szer = szer;
		}
		else {
			--szer;
		}
	}
	if (maks_szer == 0 && szer == 1) {
		maks_szer = 1;
	}
	cout << maks_szer << '\n';
}