本文主要是介绍[PKU 3378]Crazy Thairs(平衡树),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
【题目大意】:
N个数(N<=50000),求5个互相不逆序的数的组合有多少个。
【题目分析】:
这个题的重要的地方在于要统计的是长度为5的正序序列的个数,我们就可以通过正序对个数的求法来类比出来正确的方法。
正序的求法我们是在平衡树中记录size,通过rank操作来进行的。其实进行一下扩展就可以得到正确的方法。我们开4个平衡树,然后rank的含义也随之改变,第一个求的就是以当前节点为尾的长度为2的正序序列的个数。第二个、第三个、第四个以此类推。这样我们就额可以很高效的在四个树上进行rank,其实求解得过程就是一个动态规划的过程,实现的实际上也就是前缀和的操作,这个题的解法其他的解题报告上基本上都是树状数组的方法。但是那种方法因为里面的数没有上界所以必须进行离散化,无疑加大了编程的复杂度。运用平衡树就可以省去这个操作。
因为组合数C(50000,4)这个数他是不超过qword的,但是C(50000,5)超了,所以在最后搞一个高精就可以了(P.s.我高精好长时间没写了,查了好半天原来错在高精上了~)
【代码】:
这篇关于[PKU 3378]Crazy Thairs(平衡树)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!