线段树
文章平均质量分 72
omsobliga
这个作者很懒,什么都没留下…
展开
-
HDU 1754 I Hate It(线段树)
/*标准的线段树模板*/#include using namespace std;const int nMax = 200010;struct Node{ int l, r; int max; Node(){} Node(int l, int r, int max):l(l), r(r), max(max){}}node[nMax * 4];int A[nMax];i原创 2012-08-22 22:20:37 · 556 阅读 · 0 评论 -
hdu 1556 Color the ball(线段树的另一种应用)
/*线段树这道题做完以后,收获很大,学到了线段树的另一种应用:如果需要对某个区间内所有元素进行同样操作,则只需要对线段树上对应区间进行操作即可。统计每个气球被涂次数,只需要匹配到线段树的对应的区间即可,不需要统计到叶子节点。否则会超时,在最后统计结果的时候则需要搜索到叶子节点。即:①处的作用*/#include using namespace std;const int nM原创 2012-08-22 22:08:15 · 874 阅读 · 1 评论 -
线段树
谈对线段树的理解:线段树又称(区间树),实质就是:树中节点可表示一个区间,所以称为区间树更合适一些。节点中可添加适当的数据来实现相应的一些操作,每个节点的数据都是建立在左子树和右子树之上。这样做的目的使查找效率从O(n)降为O(log(n))线段树的模型:适用与使用线段树解决的问题:某些数据需要按区间进行区分,按区间进行修改,而且需要多次按区间进行查询。例如多次查询第k小元素,原创 2012-04-20 18:17:59 · 761 阅读 · 0 评论 -
POJ 2528 Mayor's posters(离散化+线段树)
/*这道题,真的做了很久,终于AC。①原来使用哈希判重,结果超时,其实一次历遍就行②在search()函数中,需要考虑查找成功和失败两种情况,失败情况容易忽略③其实对于“区间更新”问题,算法不存在错误,可以作为模版。至于A[l] ++ , A[r + 1] --,这个只能处理求和问题,实际对效率无太大影响,只是多一个log(n)④离散化处理的第一道问题,两重for()循环即可,一个判重原创 2012-09-03 19:19:38 · 1083 阅读 · 0 评论 -
HDOJ 4267 A Simple Problem with Integers(线段树)
/*显然这道题应该用线段树来做,区间更新、多次查找,然而线段树中状态比较多,需要用多个线段树来表示这些状态。原来线段树中c[][]为一个二维数组,c[k][u],其中k表示余数,u表示a%k,这样共有55种情况,不过最后内存超,然后用一维表示,通过。思路:(i - a) % k == 0 可以等效于 i % k == a % k*/#include #include const i原创 2012-09-14 20:59:52 · 791 阅读 · 0 评论 -
hdu 4417 Super Mario(线段树)
/*首先对问题进行转换,将数据分别用数组做存储,按h大小进行排序,然后从小到大进行询问操作,每次操作之前,首先将第一个数组中h值比这个值小或等于的入队,于是问题转换为线段树问题*/#include #include #include using namespace std;const int nMax = 100007;struct Tree{ int l, r;原创 2012-10-09 17:28:31 · 1065 阅读 · 0 评论