CSES - Nousevat

Annettuna on kokonaislukuja sisältävä lista. Tehtäväsi on laskea nousevien osalistojen määrä eli monessako osalistassa jokainen luku on edellistä suurempi. Myös yhden luvun sisältävät osalistat lasketaan mukaan.

Esimerkiksi listan [2, 1, 3, 4] nousevat osalistat ovat [1], [2], [3], [4], [1,3], [3,4] ja [1,3,4]. Tässä tapauksessa nousevia osalistoja on yhteensä 7.

Toteuta tiedostoon increasing.py funktio count_sublists, jolle annetaan parametrina lista lukuja. Funktion tulee palauttaa nousevien osalistojen määrä.

Sinun tulee toteuttaa tehokas ratkaisu, jonka aikavaativuus on O(n). Et voi käydä jokaista osalistaa erikseen läpi, vaan sinun tulee laskea vastaus tehokkaasti käymällä koko lista vain kerran läpi.

Tehtäväpohjan viimeisessä testissä lista sisältää luvut [1,2,\dots,10^5] ja listan jokainen osalista on nouseva. Funktiosi tulee toimia tehokkaasti tässäkin tapauksessa.

def count_sublists(numbers):
    # TODO

if __name__ == "__main__":
    print(count_sublists([2, 1, 3, 4])) # 7
    print(count_sublists([1, 2, 3, 4])) # 10
    print(count_sublists([4, 3, 2, 1])) # 4
    print(count_sublists([1, 1, 1, 1])) # 4
    print(count_sublists([1, 2, 1, 2])) # 6

    numbers = list(range(1, 10**5+1))
    print(count_sublists(numbers)) # 5000050000