ACM-线段树
Nicetomeetu-
没有
展开
-
POJ 3277 线段树 + 延迟标记
本题就是给出一堆矩形,然后让我们算总共的面积,也就是重复的面积只算一次。需要用到线段树,每次输入矩形的左端点和右端点,还有高。我们就把这条线段插进去,线段的高度取较高的那一个。注意到这和普通的线段树不太一样,普通的情况是,当我们插入的线段完全覆盖线段树中的某一条线段时,那条线段的值就被更新成插入的线段的值。但是本题的情况却不太一样,当我们插入的线段完全覆盖线段树的某一条线段时,如果现在的权值大于原原创 2016-11-25 14:35:55 · 551 阅读 · 0 评论 -
EOJ 2458 线段树
本题很明显是线段树。 关键怎么求出区间最大的频率呢?一个区间最大的频率等于左区间最大频率,右区间最大频率,中点向两边拓展的长度,这三个值中最大的那个。这道题另外一个要点就是我们在询问中肯定要做很多次拓展,难道每次都要做O(n)的搜索吗?很明显不是,只要我们预处理出每个点向左向右最多能拓展的距离,以后每次拓展就可以用之前预处理的数据了。复杂度是O(1)。 代码如下: #include #in原创 2016-11-19 20:27:13 · 406 阅读 · 0 评论 -
EOJ 2525 线段树 + 延迟标记
第一次写线段树hh。 本题很明显要用到线段树,因为是成段更新,如果不用延迟标记的话(每次更新到叶子节点)更新操作的复杂度就是o(n),用了延迟标记(每次更新到完全覆盖的节点)更新的复杂度就减成了o(logn)。还有一开始的时候一直以为一个节点只能被标记一次,在wa了无数次之后,顺便看了些大牛的模板,才发现一个点可以被包含多次(这个节点多次把它的延迟标记给它的儿子节点,但是它的儿子节点从来没有把延原创 2016-11-19 16:29:33 · 542 阅读 · 0 评论 -
POJ 2528 线段树 + 延迟标记 + 离散化
通过这道题学到了很多知识,总结了以后有以下三点: 1.线段树的创建只是一个初始化的过程,如果初始化的值都为0的话,只需要memset,根本无需写一个递归建树的过程 2.模板中的pushup函数也不是必须的 3.离散化,当点的数目很少,但是点的值又很大的时候,可以考虑离散化,既可以降低复杂度,又不至于爆内存。 本题就是不断的用所给区间染色,最后再查询有多少种颜色就可以了。思路无需赘述,不过代原创 2016-11-22 11:09:40 · 349 阅读 · 0 评论