
数据结构:线段树
文章平均质量分 83
BRCOCOLI
初学者 记录成长 Fighting
展开
-
POJ 3264 Balanced Lineup .
题目地址最基础的线段树题目,很明显的区间操作,所以第一时间要想到线段树用线段树解题,关键是要想清楚每个节点要存哪些信息(当然区间起终点,以及左右子节点指针是必须的),以及这些信息如何高效更新,维护,查询。不要一更新就更新到叶子节点,那样更新效率最坏就可能变成O(n)的了。#include#include#include#includeusing namespac原创 2016-07-24 19:23:42 · 249 阅读 · 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 · 241 阅读 · 0 评论 -
POJ 1151 Atlantis *
题目地址一直WA 一个一个字符比对正确代码,想吐槽的是 答案输出只能%f !!! woc还有犯了一些小错误 比如坐标值y用int保存了从左到右每个x值,把y的坐标分为n-1个区间,那么就转化为线段树了#include#include#include#includeusing namespace std;const int maxn=100+5;原创 2016-07-25 20:44:49 · 271 阅读 · 0 评论 -
POJ 2528 Mayor's posters -
题目地址要用到离散化一直Runtime Error 发现原因是数组开在main() 函数里 应该是开不下导致的#include#include#include#includeusing namespace std;struct CPoster{ int L,R;}pos[10100];struct CNode{ int L,R; bool Covered;原创 2016-07-25 01:06:52 · 301 阅读 · 0 评论 -
POJ 1389 Area of Simple Polygons .
题目地址:http://poj.org/problem?id=1389#include#include#include#includeusing 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 · 376 阅读 · 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 · 411 阅读 · 0 评论 -
线段树总结
解决的题目:对区间所对应的一些数据进行修改,查询。基本步骤:先建树,然后插入数据,然后更新,查询。关键部分:用线段树解题,关键是要想清楚每个节点要存哪些信息以及这些信息如何高效更新,维护,查询。 不要一更新就更新到叶子节点,那样更新效率最坏就可能变成O(n)的了。建树的方式:1)数组 若根节点下标为0。假设线段树上某节点下标为i, 则原创 2016-07-24 22:19:41 · 228 阅读 · 0 评论 -
POJ 1177 Picture 求多个矩形周长 -
题目地址:http://poj.org/problem?id=1177题目超级水。离散化后用个数组模拟一下就能过了而且不能忍的是比线段树的方法空间更小,时间更短....OMG940K 16MS #include#include#include#includeusing namespace std;const int maxn=5000+5;int y[maxn*2]原创 2016-08-30 18:22:39 · 405 阅读 · 0 评论