Neterukun's Library

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub Neterukun1993/Library

:heavy_check_mark: 対数時間ランダムアクセス/挿入/削除可能リスト (UnrolledLinkedList)
(DataStructure/List/UnrolledLinkedList.py)

概要

要素のランダムアクセスを、挿入、削除を行えるリスト。

使い方

UnrolledLinkedList()
空のリストを作成する。計算量 $O(1)$。それぞれのノードに含めることができる最大の要素数を $L(=4096)$ とする。

参考

Unrolled linked list - Wikipedia

Verified with

Code

class ULLNode:
    MAX_SIZE = 4096

    def __init__(self):
        self.next = None
        self.list = []

    def is_full(self):
        return len(self.list) == self.MAX_SIZE


class UnrolledLinkedList:
    def __init__(self):
        self.size = 0
        self.root = ULLNode()

    def __getitem__(self, i):
        nd, i = self._find_node(i)
        return nd.list[i]

    def __setitem__(self, i, val):
        nd, i = self._find_node(i)
        nd.list[i] = val

    def __len__(self):
        return self.size

    def _find_node(self, i):
        nd = self.root
        while i >= len(nd.list):
            i -= len(nd.list)
            nd = nd.next
        return nd, i

    def insert(self, i, val):
        nd, i = self._find_node(i - 1)
        nd.list.insert(i + 1, val)
        self.size += 1
        if nd.is_full():
            new = ULLNode()
            new.next = nd.next
            nd.next = new
            nd.list, new.list = nd.list[:len(nd.list) // 2], nd.list[len(nd.list) // 2:]

    def delete(self, i):
        nd, i = self._find_node(i)
        del nd.list[i]
        self.size -= 1

    def dump(self):
        res = []
        nd = self.root
        while nd is not None:
            for val in nd.list:
                res.append(val)
            nd = nd.next
        return res
Traceback (most recent call last):
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/onlinejudge_verify/documentation/build.py", line 71, in _render_source_code_stat
    bundled_code = language.bundle(stat.path, basedir=basedir, options={'include_paths': [basedir]}).decode()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/onlinejudge_verify/languages/python.py", line 96, in bundle
    raise NotImplementedError
NotImplementedError
Back to top page