Сережа очень любит деревья. Сегодня он придумал совершенно новый вид корневых бинарных деревьев.
Новое дерево состоит из n уровней, а каждая вершина проиндексирована двумя целыми числами: номером уровня и номером вершины на текущем уровне. Корень дерева находится на уровне 1 и имеет индекс (1, 1). Далее следует псевдокод построения дерева.
//глобальные данные - целочисленные массивы cnt[], left[][], right[][]
cnt[1] = 1;
заполнить массивы left[][], right[][] значениями -1;
for(level = 1; level < n; level = level + 1){
cnt[level + 1] = 0;
for(position = 1; position <= cnt[level]; position = position + 1){
if(значение position является степенью двойки){ // то есть 1, 2, 4, 8...
left[level][position] = cnt[level + 1] + 1;
right[level][position] = cnt[level + 1] + 2;
cnt[level + 1] = cnt[level + 1] + 2;
}else{
right[level][position] = cnt[level + 1] + 1;
cnt[level + 1] = cnt[level + 1] + 1;
}
}
}
После выполнения псевдокода в ячейке cnt[level] хранится количество вершин на уровне level. В ячейке left[level][position] хранится номер вершины на уровне level + 1, которая является левым сыном вершины с индексом (level, position), или хранится -1, если левого сына у вершина нет. Аналогично, ячейка right[level][position] отвечает за правого сына. В примечаниях можно посмотреть, как выглядит дерево, для n = 4.
Сережа любит все усложнять, поэтому сначала Сережа построил дерево, а потом для каждой вершины дерева Сережа завел пустое множество A(level, position). Далее Сережа выполняет m операций. Каждая операция имеет один из двух следующих видов:
- Формат операции «1 t l r x». Для всех вершин level, position (level = t; l ≤ position ≤ r) добавить значение x в множество A(level, position).
- Формат операции «2 t v». Для вершины level, position (level = t, position = v) найти объединение всех множеств вершин, находящихся в поддереве вершины (level, position). Вывести размер объединения этих множеств.
Помогите Сереже выполнить операции. В этой задаче считается, что множество содержит в себе различные элементы как std::set в C++.
Примечание
Определения связанные с корневыми деревьями можно найти по ссылке http://ru.wikipedia.org/wiki/Дерево_(теория_графов).
Ниже нарисовано построенное дерево для n = 4.