Вам предстоит реализовать множество натуральных чисел с помощью битовых векторов.
Множество - это коллекция элементов, реализующая базовые операции добавления, удаления, проверки на включение и перебор всех элементов, а также эффективно реализующая операции объединения, пересечения и разности. Последние операции всегда могут быть реализованы наивно через базовые (например, объединение множеств можно реализовать через перебор элементов обоих множеств и операцию добавления элемента), но за счёт правильной организации множества эти операции как правило можно реализовать эффективнее.
Битовые вектора - способ реализации множества элементов, пронумерованных натуральными числами.
Самый простой пример - множество самих натуральных чисел. Множество хранится в виде
последовательности целых чисел, биты в которых обозначают наличие (бит выставлен), либо отсутствие
(бит сброшен) соответствующего элемента. Например, множество чисел {0, 2, 5}
будет представлено
одним числом 37
(запись в двоичной системе - 100101
). Все операции над множествами эффективно
реализуются с помощью битовых операций над целыми числами. Единственная неэффективная операция при
такой организации - перебор элементов.
Реализовать структуру данных множества натуральных чисел, организованных битовыми векторами со следующими операциями:
- Добавление элемента
- Удаление элемента
- Проверка на включение элемента
- Объединение множеств
- Пересечение множеств
- Разность множеств
Прочитать с клавиатуры четыре числа типа size_t
. Затем прочитать четыре последовательности
натуральных чисел соответствующих длин, и сохранить их во множествах S1
, S2
, S3
и S4
.
Вывести через пробел в порядке возрастания элементы, входящие во множество ((S1 | S2) & S3) &~ S4
,
где |
- объединение, &
- пересечение, &~
- разность.
4 4 4 4
1 5 9 20
3 6 9 15
9 15 5 42
5 15 101 99
9