![](https://img-blog.csdnimg.cn/20190927151026427.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
文章平均质量分 73
数据结构
RocSin
这个作者很懒,什么都没留下…
展开
-
POJ 2481 Cows 树状数组
/** * 树状数组: * 其实这题和 POJ 2352 或者 就是道用树状数组求逆序数的题目。 * 先排序,我的排序是按照先s从小到大,如果s相等 e从大到小。 * 貌似也没什么了。就树状数组吧。。。 */ #include #include #include #include #include #define INF 0x7fffffff #define M原创 2013-07-28 20:23:35 · 523 阅读 · 0 评论 -
POJ 1195 Mobile phones(二维树状数组)
/** * 二维树状数组: * 二维的其实和一维差不多不过是对二维区间的维护。 * 其实一维和二维的区别可以类比一重积分和二重积分, * 这样在二维树状数组用get_sum()的时候就好理解些了。 * 这题还要注意的就是区间的选择:也就是算 (x, y) -> (xx, yy) 的正方形区间的时候 * 公式get_sum(xx, yy) - get_sum(xx, y原创 2013-07-28 13:21:38 · 465 阅读 · 0 评论 -
poj 2155 Matrix 二维树状数组 (经典)
/** * 这题太经典了! * 二维树状数组: * 要是对二维树状数组理解的不够是会完全想错的。 * 首先,树状数组也好,二维树状数组也好,update(int x) 一定是对数组或者二维数组 * 的维护,是在数组某个点上加上一个数后再对数组的维护! 而get_sum(int x, int y)是对二维区间 * 的求和操作。 * 而这题正好相反! 题意是改变原创 2013-07-29 16:24:38 · 511 阅读 · 0 评论 -
【完全版】线段树 (转载) 相当不错呐!
http://www.notonlysuccess.com/index.php/segment-tree-complete/ 【完全版】线段树 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时觉得挺自豪的,还去pku打广告,但是现在我自己都不太好意思去看那篇文章了,觉得当时的代码风格实在是太丑了,很多线段树的初学者可能就是看着这篇文章来练习的,如果不小心被我培养出了转载 2013-07-29 11:46:16 · 1133 阅读 · 0 评论 -
POJ 2828 Buy Tickets 线段树
/** * 线段树: * 每个节点维护的num表示:该区间还剩多少个空位。 * 插入的pos等于前面需要预留的位置数。 * 首先看插入过程。最后一个插入的元素的位置是多少,位置就是多少。 * 也就是说不会再改变。 * 如果按照顺序从前往后插,第一个插2,第二个也插2,则第一个相当于被往后挤了。 * 这样就难以维护一个区间,因为第一个节点已经被插原创 2013-08-11 07:16:03 · 599 阅读 · 0 评论 -
Uva 11020 Efficient Solutions (set的应用)
set也是个好东西,先贴set基本操作吧。。 set的基本操作: begin() 返回指向第一个元素的迭代器 clear() 清除所有元素 count() 返回某个值元素的个数 empty() 如果集合为空,返回true end() 返回指向最后一个元素的迭代器 equ原创 2013-10-12 16:51:22 · 1292 阅读 · 0 评论 -
POJ 2777 Count Color 线段树 + lazy标记
/** * 线段树 + lazy标记 * 维护区间所含颜色种数,依题种数小于30,很容易想到用位压缩记录状态, * 在更新的时候用 按位与(a | b) 就能合并两个区间所有的颜色,询问的时候返回 * 区间所记录的颜色种数(一个int型的数),返回后,再计算各位上含1的个数即为种数。 * 规定第i种颜色为(1<<i) * 其次是更新,用个lazy标记表示是否整原创 2013-10-12 22:43:33 · 736 阅读 · 0 评论 -
HDU 3874 Necklace 树状数组 + 离线处理
/** * 树状数组 + 离线: * 看人题解的,思路: 把询问区间[l, r]存下后按r从小到大排序 * 用数组hash[i]记录数字i最后一次出现的位置。用变量curR从1开始每次 * 往右扫到每个询问区间的r。关键在于没扫到新的一个数的时候,如何更新 * 维护这个树状数组。把每次询问的答案记录到ans数组。 * 具体: 当前数num[curR]如果出现过,则最后一原创 2013-10-18 23:44:45 · 722 阅读 · 0 评论 -
POJ A Simple Problem with Integers (Splay 伸展树 入门)
/** * Splay 2657 ms * 刚入手 splay,这题做第三遍了。 先是线段树,然后树状数组,这次Splay * 写的挺顺,也1A。就是手有点抽筋 -__-。。 * 算入门题吧,不过树状数组那思路挺不错的。 * 这次就记splay,如果是用splay的话就大水了。 不过效率也低,比线段树还低。 * 思路的话,就是用splay维护个sum域,再打个laz原创 2013-10-23 21:02:18 · 724 阅读 · 0 评论 -
poj 2029 Get Many Persimmon Trees 二维树状数组 大水
/** * * 大水题,据说暴搜都能过。 用的是二维树状数组,然后暴搜区间就行了。 * * 这道题犯了个超智障的连新手都不会犯的错误。被一个超低级bug搞死了。 * 特地写个解题报告来鄙视下自己。。。 * 当想用如下方式遍历区间的时候,明明知道把s, t赋值给i, j是多余的,就这么错了,以为没什么的 * int a, b; a = b = 0; * for(int i =原创 2013-07-29 11:32:03 · 546 阅读 · 0 评论 -
poj 3067 Japan 二维树状数组(入门)
/** * 二维树状数组(入门): * 二维树状数组直接上就行了。。。 * 用结构体Line存完输入数据后,按照x从小到大排序。 * 遍历一遍,每次加完crossing数后在更新维护二维树状数组。 * 这类题关键在如何用get_sum(),就是对“面积区间”(按个人理解自己取的名)的正确选取 * 仔细考虑边界情况,是否减一加一。 * 本题:ans +=原创 2013-07-28 22:03:21 · 638 阅读 · 0 评论 -
UVA 11995 - I Can Guess the Data Structure! (数据结构) STL的应用
原题: Problem I I Can Guess the Data Structure! There is a bag-like data structure, supporting two operations: 1 x Throw an element x into the bag. 2 Take out an element from the bag. Give原创 2013-04-28 22:41:07 · 1097 阅读 · 0 评论 -
UVA 10700 Camel trading 贪心(栈的使用)
/** * 这题用的是STL,第一次用STL做题,感觉挺方便的! * 不过这题还是贪心的思想吧,猜想:求最大值的时候先相加后相乘,求最小值的时候先相乘后相加。 * 证明: 依题: a,b,c,d...>= 1. 所以有 a + b * c > (a + b)*c 相减下就行了 * 所以以上思路是正确的。 * 这里说下实现方法,毕竟是第一次用stack. * 用两个栈numPlus,原创 2013-04-28 09:06:05 · 772 阅读 · 0 评论 -
UVa 10954 - Add All 贪心+优先队列
/** * 这题考的就是贪心选择,加优先队列的使用。 * 因为一开始想到的是队列,而优先队列之前不怎么用。 * 结果花了大半时间去试着证明每次入队加出队后原来的队列能否保持从小到大。 * 后来突然想到还有优先队列……这是数据结构的缺漏吗。 * 总之这题的贪心选择就是,每次选最小的两个相加。。 */ #include #include #include #include #include原创 2013-05-04 11:19:18 · 694 阅读 · 0 评论 -
POJ 1703 Find them, Catch them 种类并查集(入门)
/** * 种类并查集入门题: * 这题开始做的时候总是MLE 因为在get_together(x, y)之前没有判断find(x) != find(y) * 因为,如果find(x) == find(y) 的时候,x,y在同个集合中,那么在合并的时候,根节点的fa = y; * 而y的fa又等于根节点,就会变成没有根节点。当下次在调用find(y)的时候就会不停的原创 2013-06-29 10:36:43 · 678 阅读 · 0 评论 -
POJ 1182 食物链 (种类并查集)
/** * 种类并查集: * 这题数据天坑呐。。 必须单组才能AC,用多组数据输入就WA。 * 就下程序而言: Node中的fa表示他爸,re表示他和他爸的关系(吃他爸:1,被他爸吃:2,还是同类:0)。 * 当该节点没爸的时候,也就是本身就是根节点的时候,re就是0(和自己同类),他所有儿子的re都是和他的关系。 * 这题难点主要就是找规律且要在合并两个集合的原创 2013-06-28 20:58:13 · 751 阅读 · 0 评论 -
POJ 2299 Ultra-QuickSort(树状数组入门) 求逆序数
/** * 树状数组 入门题: (求逆序数) * 这道题wa了好几次,还是意识不够!看discuss才知道,答案是要用long long型来存的! * 还有个就是离散化,相当于把所有数据的值先排个序,换成另外一个1~n的值。 * 怎么说呢? 比如 9 5 1 3 8 离散化后就是 5 3 1 2 4 这样尽管单个数据再大, * 也能根据大小离散成 1~n的顺序原创 2013-07-25 08:05:16 · 554 阅读 · 0 评论 -
POJ 2352 Stars 树状数组(入门)
/** * 树状数组(入门): * 3次TLE,一直弄不懂原因,还是看discuss,因为依题X取值是[0, 32000] 可能取0 * 所以当x等于0的时候,lowbit(0) 就超时了。 所以把所有输入的横坐标+1就行了 * 为什么是单单横坐标呢? 因为依题已规定y是递增输入。所以一维的树状数组记录横坐标即可。 */ #include #include #incl原创 2013-07-25 23:13:52 · 637 阅读 · 0 评论 -
HDOJ 1198 Farm Irrigation 并查集
/** * 并查集(简单): * 这题麻烦在各种方向的设定,其实用到的并查集很少,就是最后算集合数的 * 方向设定好后,直接扫一遍n*m的图,对当前位置的处理就是 对可延伸方向(也就是水管能到下个方块的方向) * 的相邻方块判断,如果该延伸方向的水管同样能延伸过来,就把这两个方块的根节点合并起来。 * 其实也就是并查集最基础的应用了。 * 等扫完一遍图后,再去算原创 2013-08-01 20:03:08 · 1124 阅读 · 0 评论 -
POJ 1363 Rails 栈的应用
关于本题我只想说。。。。审题!!! 题目要求输出Yes/No 我看成YES/NO 找了一上午看discuss才发现也有和我一样傻逼的人!! 要不是看了discuss, 估计会花我一天时间 T^T 还有就是,据学长的话说,尽量少用模板,我就下定决心,还是手写吧…… Memory Time 168K 63MS原创 2013-01-26 10:00:10 · 1272 阅读 · 0 评论