
线段树
文章平均质量分 82
wjf1514
这个作者很懒,什么都没留下…
展开
-
HDU 4288 Coder
线段树。数据不算多(1e5),但是有点大(1e9),就要离散化一下,又是动态插入删除,所以必须先离线才能离散化。换句话说就是先把所有可能出现的数字都存起来,然后再把它们映射到0到num,就叫做离线+离散化。利用sum数组记录当前节点有多少子节点,ans分别记录当前节点的5种余数的和。每次询问时输出ans[2][1],就是根节点余2(第三个)的数的和,会超过int。然后pushup操作中,每个a原创 2013-09-06 15:22:33 · 474 阅读 · 0 评论 -
HDU 2888 Check Corners
二维线段树。求区间最大值,并判断最大值是不是在四角。#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include///LOOP#define REP(i, n) for(int i = 0; i原创 2013-09-26 12:40:05 · 611 阅读 · 0 评论 -
POJ 2019 Cornfields
二维线段树。本想练练二维RMQ的,结果就线段树水过了。求区间内最大值减最小值的差。#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include///LOOP#define REP(i, n) f原创 2013-09-26 12:09:30 · 640 阅读 · 0 评论 -
HDU 3911 Black And White
区间合并。简化版的HDU 3397 Sequence operation。区间异或,求最长连续区间的长度。原创 2013-09-23 13:52:50 · 733 阅读 · 0 评论 -
HDU 3397 Sequence operation
区间合并。5种操作,区间置1,置0,取反,询问区间1的个数和最长连续1的个数。分别记录区间连续1,连续0,1的总个数,及0的总个数。标记3种操作时要注意顺序和逻辑。比如置1置0都能取消取反标志。把出现过一遍以上的代码块拿出去写成函数,会使代码更简短,易维护。#pragma comment(linker, "/STACK:1024000000,1024000000")#includ原创 2013-09-23 13:07:52 · 913 阅读 · 0 评论 -
HDU 3642 Get The Treasury
体积交。给出若干长方体,求相交超过2次(3次及以上)的部分的总体积。对x,z分别离散化,注意pushup的处理,其他都是老生常谈了(最近队友总是爱用这个词)。用sum[3][M]来表示的前区间的覆盖情况,sum[0]指覆盖一次,sum[1]指覆盖两次,sum[2]指覆盖多次。cnt[M]来记录当前区间的覆盖次数。如果当前区间被覆盖了三次及以上,那么sum[0], sum[1]都为0,sum原创 2013-09-23 09:06:19 · 666 阅读 · 0 评论 -
HDU 3255 Farming
体积并。在某些矩形内撒种子,重复的地方取价值最高的那个,每个点只能存活一个,求总价值。最先想到的是二维线段树,区间修改,然后统计各种植物的个数,再乘以价值,得到答案,感觉挺麻烦的。然后发现,把价值当高度,就变成体积并了。先求一层的面积,再乘以两层之间的高度差,如此累加。每层的初始面积都是0,上一层的不要了。对于一个长方体,能到哪层,就在那层留下它的足迹。用vector来记录每层的线段。注意会超in原创 2013-09-22 14:24:33 · 646 阅读 · 0 评论 -
HDU 1828 Picture
矩形周长并。就是数竖着的区间里,竖边的条数,再加上横边即可。#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include///LOOP#define REP(i, n) for原创 2013-09-22 12:02:32 · 640 阅读 · 0 评论 -
HDU 1255 覆盖的面积
矩形面积交。跟面积并差不多,只不过要记录两种信息,就是覆盖的次数,每次求出覆盖超过两次的线段的长度,乘以高,累加即可。pushup里面需要注意一下,当覆盖次数超过1和等于0时都正常处理,但当覆盖次数等于1时,是指当前区间的覆盖次数,考虑到他的子区间可能也会有覆盖过,所以所有之前覆盖过的子区间,现在都是又多被覆盖了1次。即sum[rt][1] = sum[rt #pragma comment原创 2013-09-22 11:20:05 · 693 阅读 · 0 评论 -
HDU 1542 Atlantis
矩形面积并。模板题,给出一堆矩形,求最后的总面积。相交部分只算一次。所谓扫描线,就是指由小到大按y扫一遍,累加相邻的两条横线之间的面积。#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include原创 2013-09-22 11:23:51 · 672 阅读 · 0 评论 -
HDU 1823 Luck and Love
输入1.2,乘以10,却得不到12,输出的是11...原创 2013-09-19 10:12:06 · 1546 阅读 · 0 评论 -
POJ 2155 Matrix
二维入门题。树状数组和线段树都可以,看过论文的话二维树状数组就应该能懂,而二维线段树就要麻烦一些,时刻想着树套树。二维树状数组#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#in原创 2013-09-18 12:06:15 · 633 阅读 · 0 评论 -
HDU 3265 Posters
矩形面积并。给出一些矩形,这些矩形有的被挖了一个矩形,求最后的面积。可以把每个矩形框拆为四个矩形(也许不够四个,需要判断一下,我一开始没判断,就MLE了),怎么拆都行,就算有重叠也不在乎。中间会超int,其他就是模板了。#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#原创 2013-09-17 18:34:41 · 1186 阅读 · 0 评论 -
UVA 12299 RMQ with Shifts
线段树。单点更新,区间查询。就是说每次更新时,就按照题意,一个一个去修改。一开始我认为这样做会超时,跟队友商量了一下,也都认为会超时,但又想不到别的方法。。。。百度了一下,别人都说是水题,简单模板题,也都是这样做的。可能字符串长度不超过30使得更新的量不会太大,所以也不会TLE吧。#pragma comment(linker, "/STACK:1024000000,1024000000")原创 2013-09-30 18:22:44 · 618 阅读 · 0 评论 -
POJ 3667 Hotel
线段树,区间合并模板题。仔细研究notonlysuccess的模板,学习区间合并,其实就是在左边,在右边,还是在中间。#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include///LOOP#define REP(原创 2013-09-05 09:38:19 · 530 阅读 · 0 评论 -
HDU 1540 Tunnel Warfare
线段树,区间合并。n个村子连成一条线,鬼子炸,八路修,问x村左右共联通多少村子。三种操作分别对应炸修和问。模拟个栈来判断该修哪个,栈空判断一下。在开个数组记录一下目前各村状态,炸了就别再炸了,修了就别再修了。建树时,三个数组的初始值都是当前区间长度。更新时,判断目标p在左边还是右边。询问时,先看p在哪边,假设p在左子树,并且在左子树的rsum内,也就是说可以一直连到右子树,那么就加上lsum[原创 2013-09-05 09:34:50 · 540 阅读 · 0 评论 -
HDU 3308 LCIS
区间合并。给出一些数,记为a[i],两种操作。U x y表示把a[x] 的值改为 y。Q x y表示求xy间的最长连续上升序列(LCIS)。这里的x y都是从0开始的。其实吧,就是比较当前区间的左右子区间能否相连,也就是说要看a[k] 与 a[k + 1]的大小关系(k表示区间中点)。其他操作跟“正常”题一样。原创 2013-09-11 16:15:58 · 587 阅读 · 0 评论 -
HDU 2871 Memory Control
线段树综合题,好题。原创 2013-09-10 19:54:09 · 823 阅读 · 0 评论 -
UVA 11992 Fast Matrix Operations
线段树。初始为零的矩阵,有三种操作,选出子矩阵来修改,增加,和查询总和,最小值,最大值。可以二维线段树,但仁慈的出题人说:There will be at most twenty rows in the matrix(最多20行)。就可以用一维来解了。注意add标记和set标记的先后逻辑顺序即可。#pragma comment(linker, "/STACK:1024000000,1024原创 2013-09-27 08:52:53 · 964 阅读 · 0 评论