#include<stdio.h>
#include<stdlib.h>
struct node
{
int key;
struct node *left, *right;
};
struct node *newNode(long int item)
{
struct node *temp = (struct node *)malloc(sizeof(struct node));
temp->key = item;
temp->left = temp->right = NULL;
return temp;
}
int h;
int node_level(struct node *root, long int d, long int level)
{
if(root==NULL)
return 0;
if(root->key == d)
return level;
h = node_level(root->left, d, level+1);
if(h!=0)
return h;
h = node_level(root->right, d, level+1);
return h;
}
void inorder(struct node *root)
{
if (root != NULL)
{
inorder(root->left);
printf("%d ", root->key);
inorder(root->right);
}
}
struct node* insert(struct node* node, long int key)
{
if (node == NULL) return newNode(key);
if (key < node->key)
node->left = insert(node->left, key);
else
node->right = insert(node->right, key);
return node;
}
int main()
{
struct node *root = NULL;
long int num,n,ele,j=0;
scanf("%ld", &num);
n=num;
long int a[n+1];
while(num--)
{
scanf("%ld", &ele);
a[j++] = ele;
root= insert(root,ele);
}
//inorder(root);
//printf("\nHeights are as follows\n");
int cnt=0;
for(int i=0;i<n;i++)
{
// printf(" %d is at level %d\n", i, node_level(root, i,0));
a[i]=node_level(root,a[i],0)+ a[i-1];
printf("%ld\n", a[i]);
}
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CiAgCnN0cnVjdCBub2RlCnsKICAgIGludCBrZXk7CiAgICBzdHJ1Y3Qgbm9kZSAqbGVmdCwgKnJpZ2h0Owp9OwoKc3RydWN0IG5vZGUgKm5ld05vZGUobG9uZyBpbnQgaXRlbSkKewogICAgc3RydWN0IG5vZGUgKnRlbXAgPSAgKHN0cnVjdCBub2RlICopbWFsbG9jKHNpemVvZihzdHJ1Y3Qgbm9kZSkpOwogICAgdGVtcC0+a2V5ID0gaXRlbTsKICAgIHRlbXAtPmxlZnQgPSB0ZW1wLT5yaWdodCA9IE5VTEw7CiAgICByZXR1cm4gdGVtcDsKfQogIAppbnQgaDsKCmludCBub2RlX2xldmVsKHN0cnVjdCBub2RlICpyb290LCBsb25nIGludCBkLCBsb25nIGludCBsZXZlbCkKewoJaWYocm9vdD09TlVMTCkKCSByZXR1cm4gMDsKCSAKCWlmKHJvb3QtPmtleSA9PSBkKQoJIHJldHVybiBsZXZlbDsKCSAKCSBoID0gbm9kZV9sZXZlbChyb290LT5sZWZ0LCBkLCBsZXZlbCsxKTsKCSBpZihoIT0wKQoJICByZXR1cm4gaDsKCSAKCSBoID0gbm9kZV9sZXZlbChyb290LT5yaWdodCwgZCwgbGV2ZWwrMSk7CgkgcmV0dXJuIGg7Cn0KICAKdm9pZCBpbm9yZGVyKHN0cnVjdCBub2RlICpyb290KQp7CiAgICBpZiAocm9vdCAhPSBOVUxMKQogICAgewogICAgICAgIGlub3JkZXIocm9vdC0+bGVmdCk7CiAgICAgICAgcHJpbnRmKCIlZCAiLCByb290LT5rZXkpOwogICAgICAgIGlub3JkZXIocm9vdC0+cmlnaHQpOwogICAgfQp9CiAgCnN0cnVjdCBub2RlKiBpbnNlcnQoc3RydWN0IG5vZGUqIG5vZGUsIGxvbmcgaW50IGtleSkKewogICAgaWYgKG5vZGUgPT0gTlVMTCkgcmV0dXJuIG5ld05vZGUoa2V5KTsKCiAgICBpZiAoa2V5IDwgbm9kZS0+a2V5KQogICAgICAgIG5vZGUtPmxlZnQgID0gaW5zZXJ0KG5vZGUtPmxlZnQsIGtleSk7CiAgICBlbHNlCiAgICAgICAgbm9kZS0+cmlnaHQgPSBpbnNlcnQobm9kZS0+cmlnaHQsIGtleSk7CiAgCiAgICByZXR1cm4gbm9kZTsKfQoKaW50IG1haW4oKQp7CglzdHJ1Y3Qgbm9kZSAqcm9vdCA9IE5VTEw7Cglsb25nIGludCBudW0sbixlbGUsaj0wOwoJc2NhbmYoIiVsZCIsICZudW0pOwoJbj1udW07Cglsb25nIGludCBhW24rMV07Cgl3aGlsZShudW0tLSkKCXsKCQlzY2FuZigiJWxkIiwgJmVsZSk7CgkJYVtqKytdID0gZWxlOwoJCXJvb3Q9IGluc2VydChyb290LGVsZSk7Cgl9CiAgICAvL2lub3JkZXIocm9vdCk7CiAgICAKICAgIC8vcHJpbnRmKCJcbkhlaWdodHMgYXJlIGFzIGZvbGxvd3NcbiIpOwogICAgCiAgICBpbnQgY250PTA7CiAgICAKICAgIGZvcihpbnQgaT0wO2k8bjtpKyspCiAgICB7CiAgICAvLwlwcmludGYoIiAlZCBpcyBhdCBsZXZlbCAlZFxuIiwgaSwgbm9kZV9sZXZlbChyb290LCBpLDApKTsKICAgIGFbaV09bm9kZV9sZXZlbChyb290LGFbaV0sMCkrIGFbaS0xXTsKICAgIHByaW50ZigiJWxkXG4iLCBhW2ldKTsKICAgIH0KICAKICAgIHJldHVybiAwOwp9