

'''simple docstring'''

from __future__ import annotations

def      __magic_name__							(			A				)      ->		list[int]:
	if not list_of_ints:
		return []

	if min(A				) < 0:
		raise ValueError('All numbers must be positive'				)

	snake_case							=					max(len(bin(A				)[2:]				) for x in list_of_ints				)
	return _msd_radix_sort(A       , A				)

def      __magic_name__							(			A       , A				)      ->		list[int]:
	if bit_position == 0 or len(A				) in [0, 1]:
		return list_of_ints

	snake_case							=					[]
	snake_case							=					[]
	# Split numbers based on bit at bit_position from the right
	for number in list_of_ints:
		if (number >> (bit_position - 1)) & 1:
			# number has a one at bit bit_position
			ones.append(A				)
		else:
			# number has a zero at bit bit_position
			zeros.append(A				)

    # recursively split both lists further
	snake_case							=					_msd_radix_sort(A       , bit_position - 1				)
	snake_case							=					_msd_radix_sort(A       , bit_position - 1				)

	# recombine lists
	snake_case							=					zeros
	res.extend(A				)

	return res

def      __magic_name__							(			A				)      ->		Any:
	snake_case							=					len(A				)
	if not list_of_ints or length == 1:
		return

	if min(A				) < 0:
		raise ValueError('All numbers must be positive'				)

	snake_case							=					max(len(bin(A				)[2:]				) for x in list_of_ints				)
	_msd_radix_sort_inplace(A       , A       , 0       , A				)

def      __magic_name__							(			A       , A       , A       , A				)      ->		Any:
	if bit_position == 0 or end_index - begin_index <= 1:
		return

	bit_position -= 1

	snake_case							=					begin_index
	snake_case							=					end_index - 1
	while i <= j:
		snake_case							=					False
		if not (list_of_ints[i] >> bit_position) & 1:
			# found zero at the beginning
			i += 1
			snake_case							=					True
		if (list_of_ints[j] >> bit_position) & 1:
			# found one at the end
			j -= 1
			snake_case							=					True

		if changed:
			continue

		snake_case			,			snake_case							=					list_of_ints[j], list_of_ints[i]
		j -= 1
		if j != i:
			i += 1

	_msd_radix_sort_inplace(A       , A       , A       , A				)
	_msd_radix_sort_inplace(A       , A       , A       , A				)


if __name__ == "__main__":
						import doctest

						doctest.testmod()








'''simple docstring'''

def      __magic_name__							(			A				)      ->		tuple[int, int]:
	# base case
	if len(A				) == 1:
		return a[0], a[0]
	else:
		# split A into half.
		snake_case							=					a[: len(A				) // 2]
		snake_case							=					a[len(A				) // 2 :]

		# 2 sub problems, 1/2 of original size.
		snake_case			,			snake_case							=					max_difference(A				)
		snake_case			,			snake_case							=					max_difference(A				)

		# get min of first and max of second
		# linear time
		snake_case							=					min(A				)
		snake_case							=					max(A				)

		# 3 cases, either (small1, big1),
		# (min_first, max_second), (small2, big2)
		# constant comparisons
		if biga - smalla > max_second - min_first and biga - smalla > biga - smalla:
			return smalla, biga
		elif biga - smalla > max_second - min_first:
			return smalla, biga
		else:
			return min_first, max_second


if __name__ == "__main__":
						import doctest

						doctest.testmod()





