def kthsmallest(A, B, k):
    if k < 1:
        return None
a_len, b_len = len(A), len(B)
if a_len == 0:
    return B[k - 1]
if b_len == 0:
    return A[k - 1]
if a_len + b_len == k:
    if A[-1] < B[-1]:
        return B[-1]
else:
    return A[-1]
i = a_len * (k - 1) // (a_len + b_len)
j = k - 1 - i
if j >= b_len:
    j = b_len - 1
i = k - 1 - j
if A[i] <= B[j]:
    if j == 0 or B[j - 1] <= A[i]:
        return A[i]
return kthsmallest(A[i:], B[:j], k - i)
if i == 0 or A[i - 1] <= B[j]:
    return B[j]
return kthsmallest(A[:i], B[j:], k - j)
Поиск k-го наименьшего элемента в объединении отсортированных массивов