CSES - Pikalista Tehtäväsi on toteuttaa oma tehokas lista-tietorakenne, joka tarjoaa seuraavat toiminnot:
  • Poista listalta listan $k$ ensimmäistä alkiota ja siirrä ne samassa järjestyksessä listan loppuun
  • Ilmoita, mikä alkio listalta löytyy indeksiltä $i$
Tietorakenteen jokaisen operaation tulee olla $O(1)$-aikainen. Voit olettaa, että jokainen alkio on kokonaisluku väliltä $1 \dots 10^9$.

Toteuta tiedostoon quicklist.py luokka QuickList seuraavan mallin mukaisesti.
class QuickList:
    def __init__(self, t):
        # TODO

    def move(self, k):
        # TODO

    def get(self, i):
        # TODO

if __name__ == "__main__":
    q = QuickList([1,2,3,4,5,6,7,8,9,10])
    print(q.get(4)) # 5
    q.move(3)
    print(q.get(4)) # 8
    q.move(3)
    print(q.get(4)) # 1
    q.move(10)
    print(q.get(4)) # 1
    q.move(7)
    q.move(5)
    print(q.get(0)) # 9
Selitys Listan sisältö käyttäytyy koodipohjassa näin:
  • $[1,2,3,4,5,6,7,8,9,10]$
  • move(3) $\rightarrow$ $[4,5,6,7,8,9,10,1,2,3]$
  • move(3) $\rightarrow$ $[7,8,9,10,1,2,3,4,5,6]$
  • move(10) $\rightarrow$ $[7,8,9,10,1,2,3,4,5,6]$
  • move(7) $\rightarrow$ $[4,5,6,7,8,9,10,1,2,3]$
  • move(5) $\rightarrow$ $[9,10,1,2,3,4,5,6,7,8]$