C/C++

Пожалуйста помогите с задачей на С++

Кто поможет буду очень благодарен, заранее спасибо !

Задача:

Дана матрица размера M × N. Найти максимальный среди элементов тех столбцов, которые упорядочены либо по возрастанию, либо по убыванию.
Если упорядоченные столбцы в матрице отсутствуют, то вывести 0

Пример 1
Ввод
3 3
0 0 0
1 1 1
2 0 0
Вывод
2

Пример 2
Ввод
4 3
0 0 0
1 -1 0
2 -2 -1
3 -3 1
Вывод
3

Пример 3
Ввод
3 4
1 2 3 4
100 2 3 4
0 2 2 1
Вывод
4

Примечания
Условие вида «дана матрица размера M × N» означает, что вначале дается фактический размер двумерного массива-матрицы (количество строк M и количество столбцов N), а затем приводятся элементы этого массива (количество элементов равно M·N).
Если в задании явно не указывается, какие значения могут принимать размеры исходной матрицы, то предполагается, что и число строк, и число столбцов может меняться.
Порядковые номера начальной строки и начального столбца матрицы считаются равными 1.
Ввод и вывод элементов матрицы осуществляются по строкам.
Квадратной матрицей порядка M называется двумерный массив-матрица размера M × M.
Если в задании, связанном с созданием (преобразованием) матрицы, не описан результирующий набор данных, то предполагается, что этим набором является созданная (преобразованная) матрица, и необходимо вывести все ее элементы.
 #include   
#include
using namespace std;

struct elem //умная ячейка
{
short good{-1}, direct{}; //состояние, направление
int value{}, value_max{}; //текущее значение, максимальное значение
void insert(const int& val) //вставка значения
{
//если состояние не гууд - выход из вставки.
//если состояние -1 значит первая вставка без прооверок, после чего переводится в состояние 1
if (!good) return; else if (good == -1) { value = val; value_max = val; good = 1; return; }
//если направление не задано а значения различаются
if (!direct && val != value)
{
direct = val > value ? 1 : -1; //задаем направление упорядочивания
if (direct > 0) value_max = val; //и если оно положительное - обновляем максимальное значение
}
else if (val == value) return; else //если значения не меняются - выходим из вставки иначе:
{
if (direct < 0 && val < value) value = val; //если вставляемое значение совпадает с направлением вниз, меняем текущее
else if (direct > 0 && val > value_max) value_max = val; //если тоже самое с направление вверх, обновляем максимальное
else good = 0; // если ни то не другое - значит направление поменялось, делаем ячейку "плохой".
}
}
};

int main()
{
size_t n, m;
int tmp; int max_v{};
cin >> n >> m;
vector base(m); //массив умных ячеек с размером равной длине одной строки
for (size_t i = 0; i < n; i++)
{
for (size_t j = 0; j < m; j++)
{
cin >> tmp; base[j].insert(tmp); //заполняем ячейки
}
}
size_t it = 0;
for (; it < m; it++) //ищем первый валидный максимум
{
if (base[it].good)
{
max_v = base[it++].value_max; break; //если находим - задаем его прерываем цикл
}
}
for (; it < m; it++) //продолжаем цикл и находим максимальный элемент в оставшихся ячейках
{
if (base[it].good && base[it].value_max > max_v) max_v = base[it].value_max;
}
//если все циклы отработали в холостую выведится первоначальное значение мах_в = 0
//иначе выведится максимум (в том числе если он меньше нуля)
cout
Эдуард Чурюмов
Эдуард Чурюмов
51 416
Лучший ответ
Doston Yunusov <( ‵□′)>───Cε(┬﹏┬)3