Mam pewne przemyślenia do tego zadania. Skoro wiemy, że jeśli obracamy [l, p] to nie zmienia to sum na [0, l-1] i [p+1, n] to sugeruje to żeby policzyć sumy prefiksowe, zobaczyć gdzie stają się ujemne i teraz l to najmniejszy indeks w którym sumy stają się ujemne, a p największy. Musimy obrócić co najmniej [l, p] ale być może więcej. Policzmy sumy sufiksowe dla [l, p] (lub prefiksowe dla [p, l]) musimy zagwarantować że żadna suma na tym przedziale + sum([0, l-1]) nie będzie ujemna. Możemy jedynie zmniejszać l lub zwiększać p. Najbardziej opłaca nam się oczywiście zmniejszać l, bo szukamy rozwiązania o najmniejszym l, więc zróbmy to. Zmniejszmy l o 1 i policzmy sume sufiksową na [l-1, p]. Teraz jeśli po dodaniu sum([0, l-2]) mamy coś ujemnego musimy dodać pewien fragment [p+1, p+k] żeby to naprawić. Więc szukamy najmniejszego k, że po dodaniu sum([p+1, p+k]) dostajmy nieujemne sumy na przedziale [l-1, p]. Wydaje mi się, że to k możemy znaleźć bin searchem. Oczywiście powtarzamy to wszytko dla co raz to mniejszych l.
Jeśli pomysł jest poprawny to dostajemy rozwiązanie w O(nlogn)