数据结构
文章平均质量分 68
AlmostFree
这个作者很懒,什么都没留下…
展开
-
hdu 5465 二维树状数组+nim博弈
题意:问题描述克拉克是一名人格分裂患者。某一天,有两个克拉克(aaa和bbb)在玩一个方格游戏。 这个方格是一个n∗mn*mn∗m的矩阵,每个格子里有一个数ci,jc_{i, j}ci,j。 aaa想开挂,想知道如何打败bbb。 他们要玩qqq次游戏,每一次做一次操作: 1. 取出当中的一个子矩阵(x1,y1)−(x2,y2)(x_1, y_1)-(x_2, y_原创 2015-09-20 09:26:29 · 611 阅读 · 0 评论 -
poj 3667 线段树区间合并
题意:n个房间,有如下两种操作:1 d:有d个人要入住,并且入住的要是连续的房间;打印输出连续房间的第一个房间,若住不进去,输出0;2 x d:从x开始有d个人退房。解析:区间合并的模板往上套了。具体细节还是想不明白,先放着吧。来自:http://www.cnblogs.com/yewei/archive/2012/05/05/2484471.html原创 2015-07-16 15:00:00 · 418 阅读 · 0 评论 -
hdu 4585 set + pair
题意:少林方丈丢了少林的交战谱,现在要你来还原。方丈的攻击力为1000000000,他的id为1。每个和尚都有不同的攻击力和id,他们入少林的时候会与前辈发生一场战斗,挑选对象的时候,他会选择与他攻击力差的绝对值最小的前辈来打。当有俩前辈与其攻击力差值的绝对值相等的时候,他会选择攻击力小的那个前辈来干。现在按照入少林时间顺序给出这些和尚的攻击力和id,让你来还原少林的交战谱。原创 2015-08-24 15:43:59 · 412 阅读 · 0 评论 -
hdu 4578 线段树 成段+ 成段* 成段替换 区间求平方和 立方和
题意:RT- -四种操作:1 x y c : akk+c, k = x,x+1,…,y2 x y c : akk×c, k = x,x+1,…,y3 x y c : ak4 x y p : axp+ax+1p+…+ayp解析:http://blog.csdn.net/shiqi_614/article/details/9939485重新理解了懒原创 2015-08-24 16:16:11 · 734 阅读 · 0 评论 -
ST算法详解+例题 O(1)查询区间最大最小值
RMQ问题, ST算法。原创 2015-08-08 21:04:09 · 4226 阅读 · 0 评论 -
hdu 4547 lca-tarjan离线算法
题意:Problem Description 在Windows下我们可以通过cmd运行DOS的部分功能,其中CD是一条很有意思的命令,通过CD操作,我们可以改变当前目录。 这里我们简化一下问题,假设只有一个根目录,CD操作也只有两种方式: 1. CD 当前目录名\...\目标目录名 (中间可以包含若干目录,保证目标目录通过绝对路径可达) 2. CD ..原创 2015-08-09 16:47:02 · 335 阅读 · 0 评论 -
poj 2528 线段覆盖 求能看到的线段有几段 (线段切割) poj 3277 (矩形切割)
题意:在一条直线上有几条线段按照输入顺序往上贴,问最后能看到的线段有几条。解析:线段树看不懂,学了一种解法,叫线段切割。来自:http://blog.csdn.net/acdreamers/article/details/8777920。代码:#include #include #include #include #include #include原创 2015-07-15 19:47:02 · 343 阅读 · 0 评论 -
hdu 2874 lca-tarjan离线算法(模板)
题意:给n个点,m条边带权值的森林,然后q(10^6)次询问,询问每个点之间的最短距离,若两点不属于同一个联通块,则输出not ...解析:新学了一种lca-tarjan的模板,看起来稳多了。这题是遍历所有的点,把森林中的也变成lca。然后记录答案,最后如果答案被修改过,就输出,如果为-1,则点没有被连到。代码:#include #include #原创 2015-08-09 20:44:20 · 522 阅读 · 0 评论 -
poj 1330 lca-targan离线算法
题意给树求lca。解析离线算法:首先读入所有的询问,并不一定按照原来的顺序处理这些询问。 以下转:http://blog.chinaunix.net/uid-1721137-id-181005.html TarjanLCA的递归过程就是深度优先搜索。 Tarjan作为离线off-line算法,在程序开始前,需要将所有等待询问的节点对提前存储,然后程序从树根开始执行TarjanLCA()。假如有原创 2015-08-09 11:15:01 · 495 阅读 · 0 评论 -
poj 1470 lca-targan离线算法
题意:给一棵树n个节点,然后一些k个询问u,v。最后输出的是每个询问中被询问的u,v的最近公共祖先和被访问的次数。解析:用targan离线处理,每次遇到访问则cnt++。代码:#include #include #include #include #include #include #include #include #include #i原创 2015-08-09 13:46:52 · 402 阅读 · 0 评论 -
hdu 2586 lca-st在线算法
题意给一棵树,点与点之间有边权,求这棵树上,点与点之间的最短距离。解析首先先学习lca-st在线算法:在线算法:边输入边查询。 lca-st算法流程: 如下树(暂以二叉树为例,其他树类似): 此树在深度优先遍历时,记录以下几个值: 1.遍历节点的顺序(ver): A -> B -> D -> F -> D -> G -> D -> B -> E -> H -> E -> B -> A原创 2015-08-09 10:27:47 · 470 阅读 · 0 评论 -
hdu 1540 set的妙用
题意:有n个村子,m个操作。两种操作:1. D x:将x村庄破坏;2. Q x:询问包含 x 连续的未被破坏的村庄有多少个。解析:线段树实在不懂 T T。搞了一种set的方法来做,把被破坏的村子往set里面插,然后要询问的时候直接lower_bound()求出刚好大于元素 x 的被破坏的村庄。然后迭代器往后减1就是刚好小于元素 x 的被破坏的村庄,相减就行了原创 2015-07-16 16:45:09 · 360 阅读 · 0 评论 -
poj 3411 dij+状压
题意:n个城市,编号为1~n,他们间有m条单向路,分别从a到b,可以在c处交P路费,也可以直接交R路费。现在从1到n,问最少的花费是多少。解析:每次取边的时候判断一下。代码:#include #include #include #include #include #include #include #include #include #原创 2015-08-10 17:18:17 · 334 阅读 · 0 评论 -
poj 2886 反素数+约瑟夫环线段树单点更新
题意:有n(5*10^5)只小朋友做游戏,每个人手上有一张卡片,上面记录着一个非零的数val。现在他们按照1~n坐成一个环。然后游戏从第k只小朋友开始,他先跳出这个圈,然后如果他手上的val为正,则下一个小朋友的位置就是他当前位置+val;相反的,如果他手上的val为负,则下一个小朋友的位置就是他当前位置-val。现在,第p次的小朋友跳出圈圈的时候他会获得f(p)个糖果,f原创 2015-08-07 21:56:34 · 416 阅读 · 0 评论 -
poj 3109 离散化+扫描线+树状数组
题意:给一些坐标,求由这些坐标中的四个点组成的两条直线所相交的点有多少个。解析:扫描线+树状数组。今天超级累,昨晚做cf做太晚了。。。学习了扫描线的单点写法,有空了吧代码改成按Y扫描的熟悉熟悉。代码:#include #include #include #include #include #include #include #inc原创 2015-08-06 23:31:56 · 550 阅读 · 1 评论 -
CF#310 div2 D set+pair+贪心
题意这场比赛的题意都很不好看懂- -。 这题还算是题意好懂得一题。 给n(2 * 10^5)个区间[l, r],给m(2 * 10^5)个桥的长度。 现在要在每个区间之间建桥,桥可以被建的条件是: 设区间1为 [l_1, r_1] < 区间2为[l_2, r_2],桥的长度为len, 那么要求长度一能够得着两个区间,即 len > l_2 - _r1; 二不超过两个区间,即 len <原创 2015-08-19 22:36:04 · 434 阅读 · 0 评论 -
poj 1511 线段树+离散化+扫描线
题意:给一些笛卡尔坐标系里的矩形左下角和右上角的坐标,求这些矩阵的面积并。解析:学习了扫描线的用法。这题的线段树主要是用来维护 x 坐标的距离和,对 y 来扫描线。然后每次有个出树戳和入树的戳。我是看了下面这篇博客才恍然大悟的:点击打开链接我怕这个网站的图会挂:每次计算的就是块的面积,sum【1】记录的原创 2015-07-16 09:31:39 · 381 阅读 · 0 评论 -
单调栈详解 + poj 2796 poj 2559 CF 547B
单调栈:定义:用栈结构来实现,使得遍历数组中栈顶元素保持一定范围的最大或最小,并且栈中元素始终保持单调性的栈。功能:用以快速(O(n))求出数组中某连续子集中的最大值或者最小值。原理:以求某连续子集中的最小值为例:假设某数组为: 下标123456元素316452模拟过程:原创 2015-05-28 16:12:47 · 1075 阅读 · 0 评论 -
hdu 3511 圆扫描线
hdu3511题意给n(50,000)个坐标系上的圆,xi,yi,ri。 这些圆相互不相交,并且不相切,只有相互无关或者包含的关系。 (这句话保证了扫描线的可行性)。 求被最深处的圆被其他圆包含了几次。解析扫描线学习心得 这个博客写的好,通俗易懂。 用set来维护所谓的上下事件点的关系。 优先级别高的处在前面位置。 线的优先级别的确定是根据y点的大小来判断的,y越大,优先级越高。代码#原创 2015-07-22 21:58:34 · 378 阅读 · 0 评论 -
poj 2236并查集
题意:给一些点的坐标,当这些点被修复时,就会将这些点距离为d内的点相连。O x,操作是修复x节点;S x y,操作是询问x 和y节点是否被点亮在同一个区域。解析:并查集。代码:#include #include #include #include #include #include #include #include #include原创 2015-07-19 23:06:21 · 297 阅读 · 0 评论 -
poj 2010 优先队列+贪心
题意:奶大招生,从C头奶牛中招收N头。它们分别得分cast,需要资助学费aid。希望新生所需资助不超过F,同时得分中位数最高。求此中位数。解析;贪心。先取费用最小的 n / 2 头牛,然后用剩下的最多的钱来收买高分学生。收买高分学生用优先队列来维护,分数低的为小顶,若分数低,又耗钱多,就踢出队列。代码:#include #include #inc原创 2015-07-19 19:35:54 · 308 阅读 · 0 评论 -
poj 1703 poj 2492 并查集 桥梁判AB组
poj 1703:题意:有N名来自两个帮派的小弟,已知一些小弟不属于同一帮派。判断给定两个小弟是否属于同一帮派。解析:并查集。A表示小弟在帮派A,B表示小弟在帮派B。将所有点拆成两组,当做桥梁。样例:5 5A 1 2D 1 2A 1 2D 2 4A 1 4如下图所示:1. A 1 2初始访问,肯定是不确定的。2.原创 2015-07-20 10:22:02 · 368 阅读 · 0 评论 -
poj 3171 rmq+dp
题意:有n头牛,分别愿意在[fr, to] 的时间间隔内打扫卫生,打扫收费val元。然后FJ想要在[S. E]的时间段内,都有牛在打扫卫生。问他的最小花费是多少。解析:状态转移方程:dp[end_i] = min(dp[end_i], min(dp[start_i] ~ dp[end_i]) + salary_i)然后min(dp[start_i] ~ d原创 2015-08-11 23:28:07 · 413 阅读 · 0 评论 -
poj 3321 dfs + 树状数组
题意:给一棵树,然后每个叶子节点上开始的时候有一棵苹果,然后有如下操作:C x , 如果 x 节点上有苹果,就摘下来,如果没有苹果,就长一个;Q x,询问 x 这个父亲节点下共有几个苹果。解析:把树的深度遍历和树状数组组合的绝妙至极。首先,考虑到怎么将一棵二维的树,拉成一维的到树状数组里面去维护个数。dfs + 时间戳是一个非常妙的用法,刚好把s时间戳作为树状数原创 2015-07-15 16:37:21 · 294 阅读 · 0 评论 -
poj 2777 染色线段树 count color
题意:L个线段,T种颜色,O个操作。操作:C fr to num :将 fr 到 to 段的颜色染成 num。P fr to : 询问 fr 到 to 段,染了多少种不同的颜色。解析:将颜色拆成 1 这样的话就能左右子树直接 位或 来更新父亲节点,最后询问只要取出父亲节点位或后的结果,然后拆位即可。fr 和 to 不是按顺序来的有点坑。。。原创 2015-07-15 14:56:38 · 311 阅读 · 0 评论 -
poj 2481 比壮的牛 树状数组
题意:If Si Ej - Sj, we say that cowi is stronger than cowj。然后给一堆牛的 s 和 e。问比妹纸牛壮的牛有多少只。解析:这题巨坑,有重复的牛要特判。然后先按照s降序排序,如果s相等,按照e升序排序。然后用s找比s小的,用树状数组来维护。就酱。代码:#include #include原创 2015-07-14 20:26:02 · 353 阅读 · 0 评论 -
poj 2431 poj 3253 优先队列的运用
题意:一条路起点为0, 终点为l。卡车初始时在0点,并且有p升油,假设油箱无限大。给n个加油站,每个加油站距离终点 l 距离为 x[i],可以加的油量为fuel[i]。问最少加几次油可以到达终点,若不能到达,输出-1。解析:《挑战程序设计竞赛》:“在卡车开往终点的途中,只有在加油站才可以加油。但是,如果认为“在到达加油站i时,就获得了一次可以在之后任何位原创 2015-06-06 14:16:52 · 343 阅读 · 0 评论 -
hdu 2795 线段树,区间更新求补值
题意:给一个w*h的板子,代表长为w,高为h的长方形。现在有n条1*x的小广告要往上面贴,贴的时候总是要选择高的地方并且靠左边的地方贴。每给一个广告,问他贴在第几个w,若贴不上去,则输出-1。解析:把整个板子正转90°。若h为5, w为3。则:3 | | | 1 2 3原创 2015-04-21 22:02:57 · 383 阅读 · 0 评论 -
hdu 1754 I Hate It(线段树,单点更新,区间最值)
题意是求一个线段中的最大原创 2014-07-05 14:27:43 · 477 阅读 · 1 评论 -
hdu 1166 敌兵布阵(树状数组 or 线段树)
题意是求一个线段的和,在原创 2014-07-05 14:25:32 · 454 阅读 · 0 评论 -
poj 3468 线段树(成段增减 区间求和)
题意:区间增加一个数。(-)求区间的和。代码:#include #include #include #include #include #include #include #include #include #include #include #include #define LL long long#define lson lo, mi, rt原创 2015-04-22 21:48:57 · 425 阅读 · 0 评论 -
hdu 1698 屠夫(线段树成段替换)
题意:屠夫有钱了,要把他的钩子换成银的或者金的。解析:线段树成段替换。代码:#include #include #include #include #include #include #include #include #include #include #include #include #define LL long long#de原创 2015-04-22 21:03:35 · 745 阅读 · 0 评论 -
poj 2828 插队运用(线段树,单点更新)
题意:给n,以下n行给出一个位置p,一个权值v。代表了这个人v插队在位置p。最后输出队伍。解析:归类在线段树里面,怎么也想不通用线段树来解啊。这题网上主流的解法是将整个输入倒回来往空队列里面插。因为倒回来,最后进去的人v肯定在的位置是p,所以直接插进去。线段树中维护一个空位置的数组,代表着一段间还有多少个空位置。插入的时候,检查,若左子树的空位置大于当前原创 2015-04-22 20:07:42 · 342 阅读 · 0 评论 -
poj 2309(树状数组lowbit)
题意是给你一个满二叉树,给一个数字,求这个数为根的原创 2014-06-28 11:21:33 · 844 阅读 · 2 评论 -
uva 133 The Dole Queue(循环队列)
题意是有一个环,从编号1开始顺时针取第k个,从编号n开始顺时针原创 2014-07-17 20:17:47 · 500 阅读 · 0 评论 -
uva 127 poj 1214 "Accordian" Patience (栈STL运用)
题意直接荡上来吧:一副撲克牌有52張牌,首先把紙牌一張一張由左到右排好(不能有重疊,所以共有52堆牌,每堆一張),當某一張牌與他左邊那張牌或者左邊的第三張牌有「Match」的時候,就把這張牌移到那張牌上面去。在這裡兩張牌「Match」指的是這兩張牌的花色(suit)或者點數(rank)一樣。當你做了一個移動之後,要察看是否還可以做其他的移動。在任何時間,只有最上面那張牌可以被移動。如果因為移動原创 2014-07-17 11:00:22 · 457 阅读 · 0 评论 -
poj 1182 并查集 食物链类
题意:有n只动物,分别编号1....n。所有动物都属于A,B,C中的一种,已知A吃B,B吃C,C吃A。按顺序给出下面两种共K条信息:1. x 和 y 属于同一类。2. x 吃 y 。然而这些信息可能会出错,有可能有的信息和之前给出的信息矛盾,也有的信息可能给出的 x 和 y 不在n的范围内。求k条信息中有多少条是不正确的。解析:对于每只动物,创建3个元素 i原创 2015-06-06 19:41:28 · 360 阅读 · 0 评论 -
poj 2104 and hdu 2665 划分树模板入门题
题意:给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。解析:划分树入门。bing神的模板。坑爹的地方是把-l 看成了-1........一直re。代码:poj 2104:#include #include #include #include #include #include #include原创 2015-07-27 09:57:14 · 342 阅读 · 0 评论 -
poj 2352 数星星 树状数组
题意:给星星们的坐标。求在星星左下方的星星有几颗。有几颗就是几级星星。最后将他们从0级到n-1级的个数输出。解析:题目已经将其按照y排序了,然后按照x一个一个往树状数组里面加,然后询问就行了。注意先询问,更新完ans,再去更新树状数组,因为先更新树状数组的话会把本身就直接加上了。代码:#include #include #include #原创 2015-07-14 16:06:18 · 728 阅读 · 0 评论 -
poj 2155 二维树状数组 poj 1195 二维树状数组
题意:给一个N * N的矩阵,然后现在有两种操作。1.C x1 y1 x2 y2。2.Q x y。第一种操作是将 (x1,y1)到(x2,y2)里面的点全部翻转(初始为0,翻转就是1变0,0变1)。第二种是询问 (x,y)点的状态(为0或者为1)解析:用二维的树状数组做,注意这题是从左上角到右下角来建立坐标系的。和上一题一样(),这题也是加加减减,更新就行。原创 2015-07-14 13:24:58 · 418 阅读 · 0 评论