摘要: 题目:http://poj.org/problem?id=1611并查集问题,rank[]记录与根节点的关系,num[]记录树的节点数View Code 1 #include <iostream> 2 #include<cstdio> 3 4 using namespace std; 5 int set[30010]; 6 int rank[30010]; 7 int num[30010]; 8 int find(int x) 9 {10 if(x!=set[x])11 {12 set[x]=find(set[x]);13 }14 retur... 阅读全文
posted @ 2013-01-18 20:37 琳&leen 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 地址:http://www.cppblog.com/Ylemzy/articles/98322.html树状数组是对一个数组改变某个元素和求和比较实用的数据结构。两中操作都是O(logn)。在解题过程中,我们有时需要维护一个数组的前缀和S[i]=A[1]+A[2]+...+A[i]。 但是不难发现,如果我们修改了任意一个A[i],S[i]、S[i+1]...S[n]都会发生变化。 可以说,每次修改A[i]后,调整前缀和S[]在最坏情况下会需要O(n)的时间。 当n非常大时,程序会运行得非常缓慢。 因此,这里我们引入“树状数组”,它的修改与求和都是O(logn)的,效率非常高。【理论】 为了.. 阅读全文
posted @ 2013-01-18 19:00 琳&leen 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 题目:http://poj.org/problem?id=2299一开始敲了一个冒泡,但是一看数据范围很大,会超时,然后想了想也没想出来什么好的方法,搜了一下解题报告,是逆序数的问题,线代学的不好,都忘了,搜了一下,用的是归并,还有一个方法是树状数组,没接触过树状数组,所以有了解了一下树状数组归并:在合并的过程中是将两个相邻并且有序的序列合并成一个有序序列,如以下两个有序序列Seq1:3 4 5Seq2:2 6 8 9合并成一个有序序:Seq:2 3 4 5 6 8 9对于序列seq1中的某个数a[i],序列seq2中的某个数a[j],如果a[i]<a[j],没有逆序数,如果a[i]&g 阅读全文
posted @ 2013-01-18 18:56 琳&leen 阅读(138) 评论(0) 推荐(0) 编辑