Segmented Array

Оценивание: творческая задача, 30 баллов.

Вам необходимо реализовать некоторую коллекцию индексированных данных некоторого типа T, выглядящую как несколько необычный массив. Вместо операции присваивания значения элементу массива в нём имеется операция присваивания одинаковых значений всем элементам для некоторого диапазона индексов. Также и операции поиска минимума и максимума должны работать для некоторого диапазона значений индексов. Полностью интерфейс SegmentedArray выглядит так.

При написании класса, реализующего данный интерфейс необходимо стремиться к максимальной эффективности выполнения наиболее частых операций и учитывать особенности использования отражённые в следующей таблице с заданиями:

Big
array
Small
|T|
Often Student
get() set() indexOf() min()/max()
1 1 0 1 0 0 Куленюк
1 0 1 0 0 0 Карташов
0 0 1 1 0 0 Денисова
0 1 0 1 0 0 Марченко
1 0 0 0 1 0 Швандт
0 0 0 0 0 1 Сорокина
1 0 1 0 0 1 Осецимский
0 0 1 1 1 1 Иванов
1 1 0 1 1 0 Вустянюк

Для каждого из разработанных алгоритмов необходимо определить и обосновать асимптотическую оценку вычислительной сложности. Для функций, которые в Вашем варианте задания будут вызываться часто, вычислительная сложность алгоритмов должна быть как можно более низкой.

Пример тестирующего метода для полученной структуры:

 

Представлен наиболее простой и универсальный проверочный метод, хорошо тестирует он разве что структуру, характеризуемую набором (0, 1, 0, 0, 0, 0) — маленький массив, редкие операции. В действии пример можно увидеть здесь.

Вариант интерфейса для групп Антоненко А.С.:

Big
array
Binary Often Student
get() set() add() min()/max()
1 1 1 1 0 0 Илларионова
0 0 1 1 0 1 Фесенко
1 0 1 0 0 0 Сиренко
0 1 0 0 1 1 Кваша
1 0 0 0 0 1 Григорян
0 1 1 1 0 0 Зелинский
1 0 1 0 0 0 Ковальский
0 0 0 0 1 0 Калачёв
1 1 0 0 0 1 Бровко
0 0 1 1 1 0 Байков
1 1 1 0 0 1 Недомовный