摘要:
地址:http://acm.hdu.edu.cn/showproblem.php?pid=1394题意:给n个数字(0到n-1无重复),可以拿前面任意m个放到末尾。求拿多少个数字放到末尾后数列的逆序数最小。mark:非常经典的一个题目,来自zoj月赛。先用线段树/点树/树状数组/合并排序求出原数列的逆序数,然后递推出所有情况的逆序数取最小。这题真的是非常经典,所以4种方法我都写了一次。代码:线段树(62ms、284k、991B): 1 # include 2 # include 3 4 5 # define m ((l+r)>>1) 6 # define lson l,m,p m) 阅读全文
摘要:
地址:http://acm.hdu.edu.cn/showproblem.php?pid=1754题意:给n个数字。m次操作,每次操作更新一个数字或者查询区间最大值。mark:典型线段树题。不过a的时候学了一下树状数组求区间最值。感觉对树状数组的理解又深刻了一点。不过这个更新不是O(lgn)而是O(lgn*lgn)的,比线段树慢!代码:线段树: 1 # include 2 # include 3 4 5 #define max(a,b) (a>b?a:b) 6 int n ; 7 int tr[200010 m) return q(a, b, m+1, r, rt*2+1) ;29 .. 阅读全文