PIKE_SIMPLE @ 2019-08-26 21:17:57
我使用了一个树来处理
每个节点保存这些信息:1、一个数值val;2、这个节点的右子树的节点数rn、3、这个数值的目前出现次数ap;4;左右子树的指针lc,rc。5、这个节点保存的数值所具有的逆序对有多少对count。
每次执行插入的时候传递一个数,作为记录这个插入值的逆序对n(出现在这个插入值前面并且比这个插入值大的数的数目)
当前节点插入一个新的数值的时候,如果插入的数比这个节点val大,则当前节点rn++。并且向它的右子树根节点插入。
如果比当前节点val小时,n+=rn(当前节点的右子树的节点数)+ap(当前节点的值的出现次数),并且插入到它的左子树的根节点
如果和当前节点的val一样的话,当前节点的ap++,count+=n+rn
最后如果是新建一个节点的保存这个值的话,新节点的count=n,ap++;
by PIKE_SIMPLE @ 2019-08-26 21:18:46
最后把每个节点的count合在一起输出结果
by Smile_Cindy @ 2019-08-26 21:20:47
@PIKE_SIMPLE
不能好好归并排序么?
不能好好树状数组么?
by PIKE_SIMPLE @ 2019-08-26 21:27:23
@Alpha 归并排序能懂,就是我这个原来的方法不知道为什么错,是原理错误还是其他的 (菜鸡哭泣
by Smile_Cindy @ 2019-08-26 21:34:54
@PIKE_SIMPLE
注意到不是节点数,而是右子树的数的出现次数总和。