from typing import List


def split_strings(subtree: dict) -> List[str]:
    """
    Produce the list of strings from the dictionary with concatenated chars \
    and lengths. Opposite to :func:`merge_strings()`.

    :param subtree: The dict with "strings" and "lengths".
    :return: :class:`list` of :class:`str`-s or :class:`bytes`.
    """
    strings = subtree["strings"][0]
    if subtree.get("str", True):
        strings = strings.decode("utf-8")
    lengths = subtree["lengths"]
    result = [None] * lengths.shape[0]
    offset = 0
    for i, l in enumerate(lengths):
        result[i] = strings[offset:offset + l]
        offset += l
    return result