数据结构-线段树
miss_minor
坚持,请你坚持
展开
-
UVA11525 - Permutation(线段树)
UVA11525 - Permutation(线段树)题目链接题目大意:给定一个K,将数字1-K这个序列全排列(K!种),然后给你一个公式让你求的N,问第N小的数字排列。解题思路:因为这个求N的公式很特别,Si(K - i)!这个其实就是确定了第i个数是第(Si + 1)大的数字。例如K = 3, S序列 3 2 1,那么3 (3 - 1)!就说明第一个数是3。接着2原创 2014-09-26 09:43:50 · 976 阅读 · 0 评论 -
UVA1492 - Adding New Machine(扫描线)
UVA1492 - Adding New Machine(扫描线)题目链接题目大意:给你N∗M个格子,这些格子中某些格子是放了旧的机器,然后问现在要在这些格子放一台1∗M的新机器,问有多少种放法。解题思路:这题照样是可以转换成面积并来做,对于有旧机器(x,y)的格子,那么(x - M + 1,y)都是不可以放新机器的格子,还有从(H - M + 2,H)都是不可以放新机器的原创 2014-10-19 20:57:44 · 709 阅读 · 0 评论 -
UVA11983 - Weird Advertisement(扫描线)
UVA11983 - Weird Advertisement(扫描线)题目链接题目大意:给你n个覆盖矩形,问哪些整数点是被覆盖了k次。题目大意:这题和hdu1542是一个题型,但是这题求的是覆盖k次的点,所以pushup里面就要改一下,具体的看代码把,大概的意思就是每次都是通过下面的两个孩子节点的覆盖信息更新父节点的覆盖信息。然后这题也是需要离散化建树。比较需要注意的是这题原创 2014-10-19 15:38:30 · 1062 阅读 · 0 评论 -
HDU1542Atlantis(扫描线)
HDU1542Atlantis(扫描线)题目链接题目大意:给你n个覆盖矩形,问最后覆盖的面积。解题思路:将每个矩形拆成两条线段,一条是+1的,另一条是减1的,然后扫描先从上往下扫描,碰到加1的那条线段,那么这条线段范围内的节点的覆盖信息就+1,直到碰到减1这个线段范围内的节点的覆盖信息都需要减1。这样说可能理解不了,就可以画画矩形然后画下扫描线在理解理解。然后就是需要离散化原创 2014-10-19 15:19:00 · 1338 阅读 · 0 评论 -
UVA11402 - Ahoy, Pirates!(线段树)
UVA11402 - Ahoy, Pirates!(线段树)题目链接题目大意:给你n个01串,每个串拼接m次得到新串,最后在把这n个新串拼接起来得到最终的目标串。然后给你四种操作:F a b :把位置a到b都置为1;E a b :把位置a到b都置为0;I a b :把位置a到b上的数字翻转(0,1互换);S a b :查询位置a到b有多少个1.解题思路:原创 2014-10-16 21:54:58 · 919 阅读 · 0 评论 -
UVA11992 - Fast Matrix Operations(线段树区间修改)
UVA11992 - Fast Matrix Operations(线段树区间修改)题目链接题目大意:给你个r*c的矩阵,初始化为0。然后给你三种操作:1 x1, y1, x2, y2, v 把由x1,y1, x2, y2构成的子矩阵里的每个元素都加上v。2 x1, y1, x2, y2, v 把这个子矩阵的每个元素都修改为v。3 x1, y1, x2, y2 查询原创 2014-10-02 13:03:32 · 1114 阅读 · 0 评论 -
UVA1232 - SKYLINE(线段树区间修改)
UVA1232 - SKYLINE(线段树区间修改)题目链接题目大意:按照顺序盖楼,如果这个位置(当前要盖的楼覆盖范围内)要新建的楼的高度>=之前就有的最大高度,那么就+1.最后输出这个+1的总数。解题思路:线段树区间修改值,并且每次修改的时候返回修改的位置总数。因为可能左右子树的高度会有不同,所以这里加入一个sign来表示左右这一段是否高度一致。代码:#inc原创 2014-10-09 14:12:03 · 1301 阅读 · 1 评论 -
UVA10869 - Brownie Points II(线段树)
UVA10869 - Brownie Points II(线段树)题目链接题目大意:平面上有n个点,Stan和Ollie在玩游戏,游戏规则是:Stan先画一条竖直的线作为y轴,条件是必须要经过这个平面上的某一点,而ollie则画x轴,但是要在Stany画的y轴上经过的点中任意选择一点来作为原点画x轴。然后这个平面就被划分为4个象限,轴上的点都不算,1,3象限的点的个数就是Stan的原创 2014-10-24 15:13:22 · 864 阅读 · 0 评论 -
UVA - 1400"Ray, Pass me the dishes!"(线段树)
UVA - 1400"Ray, Pass me the dishes!"(线段树)题目链接题目大意:给你N个数字,要求你动态的给出L到R之间,X>= L && Y解题思路:结点保存三个附加线段,max_sub, max_suffix, max_prefix.对于每次查询最大的连续和要不出现在左子树的max_sub, 要不就是右子树的max_sub, 要不就是左子树的max_原创 2014-09-27 09:41:24 · 992 阅读 · 0 评论 -
UVA12086 - Potentiometer(线段树/树状数组)
UVA12086 - Potentiometer(线段树/树状数组)题目链接题目大意:给你N个数字,然后有q个操作,操作类型:M代表修改某个位置的值为r,S代表查询某一段的数字和。解题思路:线段树或者树状数组。线段树#include #include const int N = 8e5 + 5;int v[N];int n;int Query (原创 2014-09-26 09:24:12 · 898 阅读 · 0 评论 -
UVA12299 - RMQ with Shifts(线段树)
UVA12299 - RMQ with Shifts(线段树)题目链接题目大意:要求你查询某一段的最小值,但是还有一个shift操作,将(a0, a1, a2, a3..ak)这个K个位置的数字互相对掉,例如a0位置的值变成a1,a1位置的值变成a2...ak位置的值变成a0.解题思路:因为shift后面的操作数最多30个,所以可以用线段树单点修改。复杂度n*logn。用s原创 2014-09-26 09:32:43 · 1401 阅读 · 0 评论 -
UVA1455 - Kingdom(并查集 + 线段树)
UVA1455 - Kingdom(并查集 + 线段树)题目链接题目大意:一个平面内,给你n个整数点,两种类型的操作:road x y 把city x 和city y连接起来,line fnum (浮点数小数点一定是0.5) 查询y = fnum这条直线穿过了多少个州和city。州指的是连通的城市。解题思路:用并查集记录城市之间是否连通,还有每个州的y的上下界。建立坐标y的原创 2014-10-21 11:24:18 · 924 阅读 · 0 评论