A9333 | Sereja and Tree
时间限制1s
内存限制256MB
通过 / 提交0/0
题目描述
Sereja adores trees. Today he came up with a revolutionary new type of binary root trees.
His new tree consists of $n$ levels, each vertex is indexed by two integers: the number of the level and the number of the vertex on the current level. The tree root is at level $1$ , its index is $(1,1)$ . Here is a pseudo code of tree construction.
Serja loves to make things complicated, so he first made a tree and then added an empty set $A(level,position)$ for each vertex. Then Sereja executes $m$ operations. Each operation is of one of the two following types:
- The format of the operation is " $1$ $t$ $l$ $r$ $x$ ". For all vertices $level,position$ $(level=t; l<=position<=r)$ add value $x$ to set $A(level,position)$ .
- The format of the operation is " $2$ $t$ $v$ ". For vertex $level,position$ $(level=t,position=v)$ , find the union of all sets of vertices that are in the subtree of vertex $(level,position)$ . Print the size of the union of these sets.
Help Sereja execute the operations. In this problem a set contains only distinct values like std::set in C++.
His new tree consists of $n$ levels, each vertex is indexed by two integers: the number of the level and the number of the vertex on the current level. The tree root is at level $1$ , its index is $(1,1)$ . Here is a pseudo code of tree construction.
<br></br>//the global data are integer arrays cnt[], left[][], right[][]<br></br><br></br>cnt[1] = 1;<br></br>fill arrays left[][], right[][] with values -1;<br></br>for(level = 1; level < n; level = level + 1){<br></br> cnt[level + 1] = 0;<br></br> for(position = 1; position <= cnt[level]; position = position + 1){<br></br> if(the value of position is a power of two){ // that is, 1, 2, 4, 8...<br></br> left[level][position] = cnt[level + 1] + 1;<br></br> right[level][position] = cnt[level + 1] + 2;<br></br> cnt[level + 1] = cnt[level + 1] + 2; <br></br> }else{<br></br> right[level][position] = cnt[level + 1] + 1;<br></br> cnt[level + 1] = cnt[level + 1] + 1;<br></br> }<br></br> }<br></br>}<br></br>After the pseudo code is run, cell cnt\[level\] contains the number of vertices on level $level$ . Cell left\[level\]\[position\] contains the number of the vertex on the level $level+1$ , which is the left child of the vertex with index $(level,position)$ , or it contains -1, if the vertex doesn't have a left child. Similarly, cell right\[level\]\[position\] is responsible for the right child. You can see how the tree with $n=4$ looks like in the notes.Serja loves to make things complicated, so he first made a tree and then added an empty set $A(level,position)$ for each vertex. Then Sereja executes $m$ operations. Each operation is of one of the two following types:
- The format of the operation is " $1$ $t$ $l$ $r$ $x$ ". For all vertices $level,position$ $(level=t; l<=position<=r)$ add value $x$ to set $A(level,position)$ .
- The format of the operation is " $2$ $t$ $v$ ". For vertex $level,position$ $(level=t,position=v)$ , find the union of all sets of vertices that are in the subtree of vertex $(level,position)$ . Print the size of the union of these sets.
Help Sereja execute the operations. In this problem a set contains only distinct values like std::set in C++.
输入格式
The first line contains integers $n$ and $m$ $(1<=n,m<=7000)$ .
Next $m$ lines contain the descriptions of the operations. The operation of the first type is given by five integers: $1$ $t$ $l$ $r$ $x$ $(1<=t<=n; 1<=l<=r<=cnt[t]; 1<=x<=10^{6})$ . The operation of the second type is given by three integers: $2$ $t$ $v$ $(1<=t<=n; 1<=v<=cnt[t])$ .
Next $m$ lines contain the descriptions of the operations. The operation of the first type is given by five integers: $1$ $t$ $l$ $r$ $x$ $(1<=t<=n; 1<=l<=r<=cnt[t]; 1<=x<=10^{6})$ . The operation of the second type is given by three integers: $2$ $t$ $v$ $(1<=t<=n; 1<=v<=cnt[t])$ .
输出格式
For each operation of the second type, print the answer on a single line.
输入输出样例
输入 #1
4 5 1 4 4 7 1 1 3 1 2 2 2 1 1 2 4 1 2 3 3
输出 #1
2 0 1
You can find the definitions that are used while working with root trees by this link: http://en.wikipedia.org/wiki/Tree\_(graph\_theory)
You can see an example of a constructed tree at $n=4$ below.

You can see an example of a constructed tree at $n=4$ below.

C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?
提交通过
评测结果:Accepted