#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';
}
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'; } |
English