问题 F: 二叉查找树

问题 F: 二叉查找树

时间限制: 1 Sec  内存限制: 256 MB
提交: 10  解决: 4
[提交][状态][讨论版][命题人:]

题目描述

相信大家对二叉查找树都很熟悉了,现在给你 N 个整数的序列,每个整数都在区间[1,N]内, 且不重复。现在要你按照给定序列的顺序,建立一个二叉查找树,把第一个整数作为根,然 后依次插入后面的整数。 每个结点X的插入过程其实就是模拟下面的 insert(X, root)过程:

insert( number X, node N ) 

{

 increase the counter C by 1 //每次进来都会使C加1 

if X is less than the number in node N //如果X小于结点N的值 

{ if N has no left child //N没有左孩子 

       create a new node with the number X and set it to be the left child of node     N //新建一个节点, 把X作为N左孩子 

else insert(X, left child of node N)//递归插入到N左子树

 } 

else (X is greater than the number in node N) //如果X大于结点N的值 

{

    if N has no right child //N没有右孩子 

             create a new node with the number X and set it to be the right             child of node N//新建一个节点, 把X作为N右孩子 

   else insert(X, right child of node N) //递归插入到N右子树

 } 

你的任务是:每次把序列的一个整数插入到二叉查找数后,到目前为止计数累加器C的 值是多少?请把它输出。注意:第一次插入根,计数器C的值是0,你可以理解为插入根是 不执行insert()操作的,其后每插入一个结点,C都累加,也就是每次进入过程insert( number X, node N ),都会执行increase the counter C  by 1,使得C不断增大

输入

第一行一个整数:N, 表示序列有多少个整数。

 接下来有 N 行,每行一个整数 X, X 在区间[1,N]内,且不重复,这 N 个整数就组成了一个有 序的序列

输出

N 行,每行一个整数,第一行表示你把序列的第一个数插入到二叉查找树后,当前计数器 的值是多少。

样例输入

样例1
4
1
2
3
4
样例2
5
3
2
4
1
5
样例3
8
3
5
1
6
8
7
2
4

样例输出

样例1
0
1
3
6
样例2
0
1
2
4
6
样例3
0
1
2
4
7
11
13
15

提示


50%的数据 1<=N<=100



100%的数据1 <= N <=300000 

[提交][状态]