Problem:
Includes

For given two sequneces $A = \{a_0, a_1, ..., a_{n-1}\}$ and $B = \{b_0, b_1, ..., b_{m-1}\}$, determine whether all elements of $B$ are included in $A$. Note that, elements of $A$ and $B$ are sorted by ascending order respectively.

Input

The input is given in the following format.

$n$
$a_0 \; a_1 \; ,..., \; a_{n-1}$
$m$
$b_0 \; b_1 \; ,..., \; b_{m-1}$

The number of elements in $A$ and its elements $a_i$ are given in the first and second
lines respectively.
The number of elements in $B$ and its elements $b_i$ are given in the third and fourth
lines respectively.

Output

Print 1, if $A$ contains all elements of $B$, otherwise 0.

Constraints

$1 \leq n, m \leq 200,000$

$-1,000,000,000 \leq a_0 < a_1 < ... < a_{n-1} \leq 1,000,000,000$

$-1,000,000,000 \leq b_0 < b_1 < ... < b_{m-1} \leq 1,000,000,000$

Sample Input 1

4
1 2 3 4
2
2 4

Sample Output 1

1

Sample Input 2

4
1 2 3 4
3
1 2 5

Sample Output 2

0

Solution in Python3 (judge verdict: Accepted)


def includes(li1, li2):
    """Returns True if li2 is included in li1.
    Assumes li1 and li2 are sorted by ascending order.

    >>> includes([1, 2, 3], [1, 2])
    True
    >>> includes([1, 2, 3], [3, 4])
    False
    """
    def partition(li, x):
        if len(li) == 0:
            return 0
        mid = len(li) // 2
        if li[mid] < x:
            return mid + 1 + partition(li[mid+1:], x)
        elif li[mid] > x:
            return partition(li[:mid], x)
        else:
            return mid

    def binsearch(li, x):
        i = partition(li, x)
        if 0 <= i < len(li):
            return li[i] == x
        else:
            return False

    if len(li1) < len(li2):
        return False
    if len(li2) > 1:
        mid = len(li2) // 2
        i = partition(li1, li2[mid])
        if i >= len(li1) or li2[mid] != li1[i]:
            return False
        else:
            return (includes(li1[:i], li2[:mid])
                    and includes(li1[i+1:], li2[mid+1:]))
    elif len(li2) == 1:
        return binsearch(li1, li2[0])
    else:
        return True


def run():
    n = int(input())
    la = [int(x) for x in input().split()]
    assert(n == len(la))

    m = int(input())
    lb = [int(x) for x in input().split()]
    assert(m == len(lb))

    if includes(la, lb):
        print(1)
    else:
        print(0)


if __name__ == '__main__':
    run()