1) Проходитесь по массиву, находя убывающие последовательности.
2) Разворачиваете каждую их них.
3) ???
4) PROFIT!
Вот вам подсказка, как можно выделять в массиве убывающие последовательности.
start = 0;
while (start < n) {
end = start;
ПОКА (start..end+1 - убывающая последовательность) {
++end;
}
// start..end - убывающая последовательность.
start = end+1;
}
Развернуть кусок с i по j можно одним циклом while. Меняйте местами 2 крайних элемента и тогда останется развернуть кусок с i+1 по j-1.