ACM•数据结构
文章平均质量分 83
kksleric
这个作者很懒,什么都没留下…
展开
-
CF#136
A. Little Elephant and Problem题意:给出一个数组,问是否是由一个已排序的数组经过交换至多一对数得到。解法:将给定的数组排序后与元数组比较,若有多于两个位置不同则不是,否则将原数组两个位置的数字交换后比较是否与排序后数组相同。B. Little Elephant and Array题意:给出一个数组,问某个自区间内有多少个x出现了x次。解法:原创 2012-09-02 20:08:22 · 670 阅读 · 0 评论 -
hdu 4262 Juggler(树状数组)
题意:某人手上有一串珠子,顺时针编号1--n,每次可进行三种操作:顺时针旋转一个珠子,逆时针旋转一个珠子,将手中的珠子移去(移去后顺时针方向下一个珠子进入手中),问按标号12345顺序将所有珠子逐一移去,最少需要多少次操作。分析:假设当前要移除的珠子为x,x左边的珠子用A代表,右边的珠子用B代表即AxB,则无论左移还是右移都会得到xBA,即移去某个珠子对后面的珠子无影响,每次只需单独考虑A和B原创 2012-08-26 20:52:21 · 743 阅读 · 0 评论 -
spoj 861 SWAPS & uva 11990 "Dynamic'' Inversion(动态维护逆序对)
题意:有150000个数,10000条操作,每次将第i个数变为x,讯问每次操作后逆序对的数目。解法1:树状数组+treap,树状数组的每个元素都是一棵树,这样可以在lognlogn时间内查询前i项有多少个小于等于k的元素,当某个元素法师改变时,只需从树状数组中对应的treap中进行元素的删减,每次修改前后统计的第i个元素形成的逆序对数,便可知每次操作后逆序对的数目。由于Treap常熟很原创 2012-08-31 16:35:16 · 2146 阅读 · 0 评论 -
poj 2843 Cutting Cake
题意:一块N*N大的蛋糕M次讯问,每次切走一个矩形,问每次切的矩形被分成了多少块(1 解法:显然是求某个区域内的连通分量数目,由于这个区域内的元素在访问后会被切除,因此每个元素只被访问一次,因此可以通过dfs或bfs求得某个区域内的连通分量的个数,均摊复杂度。但是每次寻找遍历的起始点(即区域内未被切走的蛋糕)复杂度为O(N^2),因此需要优化,最坏情况是怎么产生的呢?当某个区域内有连续的已原创 2012-08-30 16:26:13 · 731 阅读 · 0 评论 -
hdu 4391 Paint The Wall(根N分段哈希)
将整个区间分为sqrt(n)段小区间,每个段长度为sqrt(n),并维护每一段的统计量,这样可以在sqrt(n)时间内完成一次区间查询或更新。平衡查询和更新之间矛盾是数据结构设计时的重要考虑因素,而这种做法是经典的平衡做法,早就了解,但以前没有遇到过只能用“分段”解决的题目,因此总觉着这是迫不得已的“赖招”,也从来没有写过,昨天第一次写,小细节没注意,结果悲剧的写成每次查询O(n)了。总结一下错误原创 2012-08-24 14:43:32 · 1596 阅读 · 0 评论 -
Poj 4047 Garden /2012金华邀请赛D题(线段树)
题意:给出长度为200000的数列,进行200000次下列操作:0 x y 将x的值置为y1 x y 交换x和y的值2 x y 求[x,y]区间内和最大的一个连续的长度为k的区间(y-x>k)解法:显而易见的线段树开始一直想维护每个区间的最大k区间,但是一直想不出怎么维护父节点和子节点的关系。估计如果实在现场会困死在此题。。。 于是需要转换一下思维,把点当做区间把区原创 2012-05-09 22:08:29 · 2102 阅读 · 0 评论 -
hdu 4358 Boring counting
题意:给出一棵树,每个点有一个点权,问一x为根的子树中有多少种权重恰好出现了k次。懒了,直接贴题解,况且本来也不是自己写出来的#include #include #include #include#includeusing namespace std;const int maxn = 100010;struct node { int be, ne; void原创 2012-09-02 19:52:20 · 1026 阅读 · 0 评论 -
poj 3467 Cross Counting
题意:给出一个M*N 的矩阵,矩阵中每个元素都有一种颜色(1 ≤ N, M, C ≤ 100),10000条查询,更改某个元素的颜色或查询某种颜色的corss有多少个。We say there exists a cross of size k centered at the cell (x,y)iff all cells lying in the x-th row or the y原创 2012-08-30 16:11:04 · 809 阅读 · 0 评论 -
SGU 263 Tower(平衡树+并查集)
题目链接http://acm.sgu.ru/problem.php?contest=0&problem=263题意:现有10^6个位置(cell),每个位置上可以放若干个cube,对于任意的两个数i现有10^6条修改和查询,保证合法性:put - put c cubes on cell xtput - put c cubes on column x in原创 2012-05-19 16:39:00 · 672 阅读 · 0 评论 -
fzu 2045 \ hdu 3973 AC's String(线段树+RK)
题意:给出10000个模式串和一个长度为100000的匹配串,有两种操作:1.查询匹配串的子串[L,R]是否存在于模式串中2.修改匹配串某个位置的字符解法:由于RK函数满足区间加法啊,因此可以用线段树动态维护和查询某个子串的hash值,得到子串的hash值,剩下的就是普通的rk了。将所有模式串的hash值放入map中,对于hash值相同的模式串使用链表串联起来,当获取某个子串的原创 2012-09-28 16:25:02 · 1263 阅读 · 0 评论 -
CF(173E) Camping Groups
题目链接题意:一个俱乐部有 n名成员,每名成员有两个属性:声望r和年纪a(均为109)。若干个个可以组成一个小组,每个小组中有一名组长,要求这名组长的声望高于其他成员且这名组长与组内任意成员的年龄差小于k,先给出10000条查询,问如果a、b两人在一个小组中,那么这个小组最多可以有多少人。解法:1.由于n和a相差很大,因此首先要对声望和年纪进行离散化 2.每个小组原创 2012-08-20 12:22:43 · 863 阅读 · 0 评论 -
POJ2892地道战Tunnel Warfare(线段树)
点击打开题目链接对连续的村庄进行三种操作和问询D x: The x-th village was destroyed.Q x: The Army commands requested the number of villages that x-th village was directly or indirectly connected with including itself.R:原创 2012-03-31 18:13:08 · 728 阅读 · 0 评论 -
扫描线算法在线段树中的应用
可能是没怎么搞计算几何的知识,至今对扫描线算法没有很清晰的认识,记得当初ZY大神是这样定义的: 每一个事件有一个开始时间和结束时间,将所有时间点排序,然后依次扫描,如果是开始时间就将时间加入,否则就将事件删除。则可以在任意时刻处理当前发生的事件。扫描线在计算几何中使用相对多一些,我只是为了刷通线段树的列表粗略了了解了一下,只可就事论事,无法统筹全局。“矩形面积并”是原创 2012-04-29 18:51:45 · 1227 阅读 · 0 评论 -
并查集专辑
并查集大体分为三个:普通的并查集,带种类的并查集,扩展的并查集(主要是必须指定合并时的父子关系,或者统计一些数据,比如此集合内的元素数目。)一篇不错的科普文http://hi.baidu.com/czyuan%5Facm/blog/item/531c07afdc7d6fc57cd92ab1.html普通并查集:几道裸体大水:poj 1611The Suspects记录并查集中元原创 2012-04-09 09:27:37 · 1088 阅读 · 4 评论 -
树状数组专辑
树状数组是一个优美小巧的数据结构,在很多时候可以代替线段树。树状数组的本质就是一种通过二进制位来维护一个序列前i和的数据结构。(详见论文或http://old.blog.edu.cn/user3/Newpoo/archives/2007/1712628.shtml)树状数组按照维数分为1维和2维,按照类型分可以分为插点问段和插段问点,这两个互逆,只是改变for循环的方向就可以了。一原创 2012-04-11 10:14:49 · 852 阅读 · 0 评论 -
URAL 1701 Ostap and Partners(差统计量的并查集)
题目大意:几个人在谈论他们的工资, 他会告诉你很多句话, 每句话是 a 比 b 多 c 块钱. 已知没有人的工资低于0或高于 10^9. 第一个人工资是0。 问从第几句话开始你可以判断有人在吹牛.如果没人吹牛输出每个人的工资。解法:维护每个节点到根节点的差,判矛盾的方法类似于普通的种类并查集。最后还要判如果以上描述正确是否一定有人的工资超出了范围(这种矛盾只有可能在所有关系都给出后才能判原创 2012-04-29 19:07:14 · 721 阅读 · 0 评论 -
SPOJ/GSS3:Can you answer these queries III(线段树)
http://www.spoj.pl/problems/GSS3/题意:给出一个数列,求某个区间内的最大子序列和,并进行对某些点的更新。GSS1是个不更新只查询的简化版题目,差别不大。跟hdu3397有点像,统计量也很像,但是犯了经验主义的错误,左起最大字段和=左区间左起最大字段和 或 左区间和+右区间左起最大字段和(如果左区间左起最大字段和==左区间和)是错误的,例如:100 -1原创 2012-03-30 16:46:49 · 729 阅读 · 0 评论 -
HDU3397 Sequence operation(线段树)
点击打开题目链接,还有一个类似的题,只进行01翻转操作和最大连续查询,HDU3911 Black And White对一个数列进行如下操作:Change operations:0 a b change all characters into '0's in [a , b]1 a b change all characters into '1's in [a , b]2原创 2012-03-30 16:30:10 · 552 阅读 · 0 评论 -
uva3143Fast Matrix Operations(线段树)
刘汝佳数据结构专场F题,点击打开题目链接。在一个矩阵内完成以下操作:1.将某子矩阵的值全部加v2.将某子矩阵的值全部变为v3.输出某子矩阵的最大值最小值及总和。由于矩阵至多只有20行,因此可以维护20棵线段树。维护变化统计量时要考虑多种次序,例如未更新的节点先加后边和先边后加,变化的优先级应高于加。import java.io.BufferedReader;impor原创 2012-03-30 16:05:26 · 438 阅读 · 0 评论 -
hdu 4419 Colourful Rectangle(矩形面积并)
题意:给出红绿蓝三种颜色的矩形,某些元素重叠之后会组合成其它颜色,问7种颜色的面积分别为多少。解法:考虑只有两种颜色AB,那么求A颜色矩形的面积并x,B颜色矩形的面积并为y,AB颜色矩形的面积并为z,则最终,AB颜色的面积为x+y-z,A颜色的面积为x-(x+y-z),B颜色的面积为y-(x+y-z);类似得,考虑三种颜色:根据公式先求出三种颜色混和的面积x,然后依次只考虑两种原创 2012-09-23 16:03:33 · 2399 阅读 · 0 评论