Не сложная задача на динамическое программирование (На контесте мне так не показалось =) ) Тут нужно заметить две вещи: 1) Допустим в оптимальном ответе остаются ряды a1,a2,a3,...,ak, при чем ai < ai + 1, для 0 <= i < k, то удалять ряды между (a1,a2); (a2,a3); (a3,a4)... можно в любом порядки и они не влияют друг на друга. 2) Теперь нужно выяснить можно ли удалить все ряды между фиксированными двумя (l,r). Давайте поймем какой ряд был удален последним, это такой ряд что он либо ниже l,r, либо выше l,r. Переберем этот ряд среди всех от i = l + 1,r - 1. Теперь мы разбили нашу задачу, на две аналогичные, т.к удаление рядов между (l,i) и (i,r) не зависят друг от друга. Если мы не нашли такой ряд, что можно удалить все слева и справа значит (l,r) ряд нельзя освободить. Теперь можно применить обычное ДП используя только те переходы, который мы посчитали выше, что то похожее на нахождение наибольшей возрастающей подпоследовательности.