随笔分类 -  线段树

摘要:解题思路: 先将y轴进行离散化。n个矩形的2n个横边纵坐标共构成最多2n-1个区间的边界,对这些区间编号,建立起线段树。 x轴记录左边和右边,左边时是矩形面积增加,覆盖层数增加边,右边是形面积减少,覆盖层数减少边。 阅读全文
posted @ 2017-05-31 18:58 Kearon 阅读(246) 评论(0) 推荐(0)
摘要:解题思路: 一共有1e7块砖如果每个叶子节点都代表一块瓷砖,那么线段树会导致MLE,即单位区间的数目太多。而且建树复杂度O(m),查询复杂度为 nlogm (n是海报数目m是瓷砖数目)。 可是最多有1e4张海报所以最多有2e4个端点,而这些端点最多能把墙分成2e4+1段,对这些段进行编号做离散化处理 阅读全文
posted @ 2017-05-06 14:03 Kearon 阅读(255) 评论(0) 推荐(0)
摘要:解题思路: 标准的区间更新。 树节点如果只存和会导致每次加数的时候都要更新到叶子节点,速度太慢(O(nlogn)) , 所以树节点应该存原来初始的和nsum和当刚好是这段区间所累加的和lnc。本节点区间的和实际上是nsum+lnc*(R-L+1)。 每次插入将路过的节点中的nsum加上插入的c*(r 阅读全文
posted @ 2017-05-01 14:46 Kearon 阅读(181) 评论(0) 推荐(0)
摘要:POJ3264原题 传送门:http://www.cnblogs.com/kearon/p/6739098.html 阅读全文
posted @ 2017-04-22 10:26 Kearon 阅读(116) 评论(0) 推荐(0)
摘要:解题思路: 先用数组累计从1~n的杀敌数,所以从i~j的杀敌数就是sum[j]-sum[i-1]; 进行加的时候再用线段树进行单点更新m次时间复杂度就是O(mlogn) 查找时先从累加数组中计算出最开始的杀敌数再去线段树中计算后来的杀敌数 m次时间复杂度就是O(mlogn) 阅读全文
posted @ 2017-04-22 10:24 Kearon 阅读(176) 评论(0) 推荐(0)
摘要:解题思路: 用一个数组存放线段树。根节点下标为0。假设线段树上某节点下标为i, 则: 左子节点下标为 i *2+1 右子节点下标为 i*2+2 由二叉树的定义可知叶子节点为n个时至多需要4n-1个节点 阅读全文
posted @ 2017-04-20 15:41 Kearon 阅读(226) 评论(0) 推荐(0)