Решението със сложност O(N*N*N) е засегнато в описанието на квадратичното решение, понеже двете си приличат. O(N*N) решение: Пробваме всяка възможна двойка (i,j) i=prefmin[i].val. Това може да се постигне със суфиксен масив за максимуми, който на позиция i пази най-голямата височина измежду индекси i и N и индексът, на който се намира тя. Очевидно suffmax[i].val>=suffmax[i+1].val, така че това е намаляваща редица. Та за фиксирано prefmin[i] можем да увеличаваме показалка j докато е вярно, че suffmin[j].val>=prefmin[i].val. Така си гарантираме, че сме стигнали до най-десния възможен индекс за десен край, и че следващият оптимален индекс ще е или сегашният или някой в дясно от него. Отново използваме старата dp зависимост. Предвидено беше за 100 точки да минават само линейни решение, но, уви, избраните ограничения за време и размер не бяха достатъчно стриктни. Реално се оказва, че някои решения с логаритмична сложност също изкарват 100 точки.