随笔分类 - Data Structure
Basic but quite important!
摘要:题目:Revenge of Fibonacci原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4099分析:字典树的应用。在求Fibonacci的前40位时,可以只记录下前60位,舍去后面的,这样不会因为进位而产生误差。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #define maxn 6000005 9 using namespace std; 10 char s[44],s1[101],s2[101],s3[1...
阅读全文
摘要:原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394分析:树状数组的应用。Minimum Inversion Number 1 #include 2 #include 3 #include 4 #include 5 #include 6 #define maxn 5005 7 using namespace std; 8 int c[maxn],num[maxn],n; 9 int low_bit(int i)10 {11 return i&(-i);12 }13 void update(int i,int v)14 {15 w...
阅读全文
摘要:求逆序数的方法有很多,比如归并排序,但本文重点讲一下如何用树状数组来求逆序数。 当数据的范围较小时,比如maxn=100000,那么我们可以开一个数组c[maxn],来记录前面数据的出现情况,初始化为0;当数据a出现时,就令c[a]=1。这样的话, 欲求某个数a的逆序数,只需要算出在当前状态下c[a+1,maxn]中有多少个1,因为这些位置的数在a之前出现且比a大。但是若每添加一个数据a时,就得从a+1到 maxn搜一遍,复杂度太高了。树状数组却能很好的解决这个问题,同样开一个数组d[maxn],初始化为0,d[i]记录下i结点所管辖范围内当前状态有多少个数;当添加数 ...
阅读全文

浙公网安备 33010602011771号