
数据结构:线段树
文章平均质量分 83
BRCOCOLI
初学者 记录成长 Fighting
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
POJ 3264 Balanced Lineup .
题目地址 最基础的线段树题目,很明显的区间操作,所以第一时间要想到线段树 用线段树解题,关键是要想清楚每个节点要存哪些信息(当然区间起终点,以及左右子节点指针是必须的), 以及这些信息如何高效更新,维护,查询。不要一更新就更新到叶子节点,那样更新效率最坏就可能变成O(n)的了。 #include #include #include #include using namespac原创 2016-07-24 19:23:42 · 256 阅读 · 0 评论 -
POJ 3468 A Simple Problem with Integers -
题目地址 一般求和首先想到就是每个结点保存sum的值代表这个区间的和 那么求区间的和就是找到[s,e]这个区间的结点并返回该sum值,复杂度为O(logn) 但是这样子有个不好的地方就是假如最坏的情况下把1~n区间都加c值,那么每个1~n的叶子结点都要遍历到且+c ,则时间复杂度就为O(nlogn) 于是就在结点中保存Inc这个值,表示该区间[s,e]每个数都加了c,那么上述情况复杂度就变原创 2016-07-24 21:25:32 · 248 阅读 · 0 评论 -
POJ 1151 Atlantis *
题目地址 一直WA 一个一个字符比对正确代码,想吐槽的是 答案输出只能%f !!! woc 还有犯了一些小错误 比如坐标值y用int保存了 从左到右每个x值,把y的坐标分为n-1个区间,那么就转化为线段树了 #include #include #include #include using namespace std; const int maxn=100+5;原创 2016-07-25 20:44:49 · 278 阅读 · 0 评论 -
POJ 2528 Mayor's posters -
题目地址 要用到离散化 一直Runtime Error 发现原因是数组开在main() 函数里 应该是开不下导致的 #include #include #include #include using namespace std; struct CPoster{ int L,R; }pos[10100]; struct CNode{ int L,R; bool Covered;原创 2016-07-25 01:06:52 · 307 阅读 · 0 评论 -
POJ 1389 Area of Simple Polygons .
题目地址:http://poj.org/problem?id=1389 #include #include #include #include using namespace std; const int maxn=1000+5; int y[maxn],nNode; struct Node{ int L,R,mid; int Covered; int Len; Node *pLeft,原创 2016-08-28 13:59:53 · 384 阅读 · 0 评论 -
POJ 3667 Hotel 区间合并+线段树 *
题目地址:http://poj.org/problem?id=3667 因为要求出1~n中有len长度的连续线段 所以线段树中至少要保存L~R的最大连续长度MaxLen 还要思考两个区间合并成一个区间时,MaxLen可能是左半边的MaxLen和右半边MaxLen取最长一个 又或者是左半边的MaxLen加右半边的MaxLen(当空的区间在中间是连起来的) 所以线段树要保存从L起向右的连续空原创 2016-08-30 15:52:50 · 422 阅读 · 0 评论 -
线段树总结
解决的题目:对区间所对应的一些数据进行修改,查询。 基本步骤:先建树,然后插入数据,然后更新,查询。 关键部分:用线段树解题,关键是要想清楚每个节点要存哪些信息以及这些信息如何高效更新,维护,查询。 不要一更新就更新到叶子节点,那样更新效率最坏就可能变成O(n)的了。 建树的方式: 1)数组 若根节点下标为0。假设线段树上某节点下标为i, 则原创 2016-07-24 22:19:41 · 234 阅读 · 0 评论 -
POJ 1177 Picture 求多个矩形周长 -
题目地址:http://poj.org/problem?id=1177 题目超级水。离散化后用个数组模拟一下就能过了 而且不能忍的是比线段树的方法空间更小,时间更短....OMG 940K 16MS #include #include #include #include using namespace std; const int maxn=5000+5; int y[maxn*2]原创 2016-08-30 18:22:39 · 416 阅读 · 0 评论