求助,这个方法哪里错了,第6个样例每次测试结果不一样

P1908 逆序对

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

注意到不是节点数,而是右子树的数的出现次数总和。


|