随笔 - 11, 文章 - 0, 评论 - 12, 引用 - 0
数据加载中……

zju 1484 hdu 1394 求最小逆序(点树)

先说一下逆序数的概念:
在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那末它们就称为一个逆序。
一个排列中逆序的总数就称为这个排列的逆序数。逆序数为偶数的排列称为偶排列;逆序数为奇数的排列称为奇排列。
如2431中,21,43,41,31是逆序,逆序数是4,为偶排列。 
                                   ——这是北大《高等代数》上的定义。

题意:给出一个排列,排列中的数各不相同,都是从0到n-1,要求得到的是一个最短的逆序的长度,这些子序列是转动原来的序列得到的。
一种最基本的做法:就是枚举每一个点求出这个点前面比它的数的个数,然后加起来。还好这种做法没有超时,这里有一种O(nlog(n))的算法
就是利用点树。我在网上找过,网上关于点树的资料很少,百度百科里面有一篇。还有就是http://www.cnitblog.com/cockerel/archive/2006/09/13/16806.html
不过好像是一个人写的. @_@    ^_^
以下借用了他的实现




 

posted on 2010-05-17 17:17 acleast 阅读(645) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理