1234567891011121314151617181920212223242526 |
- # Сегодняшняя задача Ксюши — провести мастер-класс по программированию для стажеров Тинькофф Старта. Для этого она решила устроить небольшую игру: Ксюша будет поддерживать множество, а стажеры будут говорить числа, которые в него добавить. После каждого добавления Ксюша будет называть максимальное значения побитового исключающего ИЛИ среди всех пар чисел этого множества.
- # Формально, если множество после очередной операции добавления равно S, то Ксюша хочет найти в нем такие два числа a, b ∈ Sb∈S, что значение a ⊕ b максимально. Если число уже присутствовало в множестве до добавления, само множество никак не меняется. Выводить ответ при этом нужно после каждого добавления, даже если множество осталось прежним.
- # Ксюша знает, что кто-то из стажеров наверняка знает, как она будет считать ответы для этой игры, поэтому просит вас написать программу, которая будет обрабатывать запросы на добавление чисел.
- # Формат входных данных
- # В первой строке вводится целое число q (1 ≤ q ≤ 3 ⋅ 10^5) — количество запросов.
- # Следующие q строк описывают запросы. i-ая строка содержит целое число k_i (0 ≤ k_i ≤ 2^{32} - 1), которое стажеры просят добавить во множество.
- # Формат выходных данных
- # Выведите q строк, чтобы i-ая строка содержала единственное целое число x_i — максимальное значение исключающего ИЛИ по всем парам чисел из множества после первых i операций.
- n = int(input())
- num = int(input())
- max = 0
- nums = {num}
- print(0)
- while n > 1:
- num2 = int(input())
- nums.add(num2)
- nums_list = list(nums)
- for i in range(len(nums_list)):
- for j in range(len(nums_list)):
- if nums_list[i] ^ nums_list[j] > max:
- max = nums_list[i] ^ nums_list[j]
- n = n - 1
- print(max)
|