
数据结构-线段树
Rain722
这个作者很懒,什么都没留下…
展开
-
HDU1255覆盖的面积(线段树+离散化+扫描线)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1542线段树求面积并升级版题目大意:被矩形覆盖过两次的地方的面积来自大佬的分析:http://www.cnblogs.com/scau20110726/archive/2013/04/14/3020998.html这题的代码在一般的线段树求面积并的基础上进行了修改,但是所用的原创 2017-03-16 17:04:39 · 1496 阅读 · 0 评论 -
HDU5861Road(线段树)
题意:有n 个村庄在一条公路上,每两个村庄之间的路有使用和不使用两种状态,使用时,每天需耗费wi 元,每段路初始时都是不使用的,在m 天中,我们总共可以打开一次、关闭一次,从第一天到第m 天,每一天给出ai、bi,表示ai 到bi 之间的路必须是通的,问每一天n-1段路的总耗费最小为多少。思路: 每段路只能打开一次,关闭一次,我们可以求出第i 段路最早什么时候使用原创 2017-09-22 11:33:58 · 321 阅读 · 0 评论 -
HDU4819 Mosaic(二维线段树)
题意:给定一个n*n的矩阵,每次给定一个子矩阵区域(x,y,l),求出该区域内的最大值(A)和最小值(B),输出(A+B)/2,并用这个值更新矩阵[x,y]的值分析:二维线段树的水题了。对于二维的矩阵,需要查询一个区域的最大和最小值。修改单个点的值。 二维线段树直接搞,主要是修改的时候,更新操作要往两个方向进行。#include#include原创 2017-08-14 20:40:20 · 423 阅读 · 0 评论 -
Codeforces 383C Propagating tree(树状数组)
题目大意:有一棵树,对这个树有两种操作:1:表示为(1 x val),在编号为x的节点上加上val,然后给x节点的每个儿子加上- val,再给每个儿子的儿子加上-(- val),一直加到没有儿子为止。2:表示为(2 x)查询x节点上的值。思路:首先通过dfs将树抽象成树状数组,然后以和根节点的层数关系作为d,开两个树状数组分别计算添加值和减少值。原创 2017-09-28 14:45:58 · 384 阅读 · 0 评论 -
Codeforce#424E. Cards Sorting(脑洞+树状数组)
E. Cards Sortingtime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputVasily has a deck of cards consisting of n原创 2017-07-18 14:51:17 · 640 阅读 · 0 评论 -
HDU5892Resident Evil(二维树状数组+状态压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5892题意:给定n和m表示有一个n*n的矩阵和m个操作,操作1:给出左上角的位置[x1,y1]和右下角的位置[x2,y2],然后给定k表示有k对[a,b]接下来在这个给定的矩阵中每个格子中都添加b个a类物品;操作2:给定左上角位置[x1,y1]和右下角位置[x2,y2],求所有物品在这个矩阵中的奇偶原创 2017-05-16 15:51:26 · 475 阅读 · 0 评论 -
light oj1085All Possible Increasing Subsequences(树状数组+离散化+递推)
题意: 问你有多少个上升子序列。(题意很坑爹!)分析:首先要离散化,因为数是int范围,而数最多时有1e5个。然后就是递推。类似于hdu5904的递推过程http://acm.hdu.edu.cn/showproblem.php?pid=5904因为以一个数结尾的递增子序列只能来自上一个递增子序列的个数,即求所有以比结尾数小的数为结尾的子序列个数之和。(有点绕原创 2016-10-23 21:31:13 · 356 阅读 · 0 评论 -
POJ2155Matrix(二维树状数组)
给出矩阵左上角和右下角坐标,矩阵里的元素 1变0 ,0 变1,然后给出询问,问某个点是多少注意树状数组是向上更新!!比如:12 2C 1 1 4 4Q 1 1这样一组数据那么矩阵里面是这样的#include#include#includeusing namespace std;const int maxn = 1005;int C[m原创 2016-10-21 17:08:54 · 340 阅读 · 0 评论 -
树状数组经典
第01讲 什么是树状数组?树状数组用来求区间元素和,求一次区间元素和的时间效率为O(logn)。有些同学会觉得很奇怪。用一个数组S[i]保存序列A[]的前i个元素和,那么求区间i,j的元素和不就为S[j]-S[i-1],那么时间效率为O(1),岂不是更快?但是,如果题目的A[]会改变呢?例如:我们来定义下列问题:我们有n个盒子。可能的操作为1.向盒子k添加石转载 2016-10-21 17:02:53 · 327 阅读 · 0 评论 -
POJ2481Cows(树状数组)
题意:就是给出N个区间,问这个区间是多少个区间的真子集。分析:关键在于排序的策略。一边固定类型的题目。#include#include#include#includeusing namespace std;const int maxn = 100005;int C[maxn], ans[maxn];struct Cow{ int low, high, index;原创 2016-10-20 21:48:42 · 332 阅读 · 0 评论 -
poj2299Ultra-QuickSort(树状数组+离散化)
算法的大体流程就是:1.先对输入的数组离散化,使得各个元素比较接近,而不是离散的,2.接着,运用树状数组的标准操作来累计数组的逆序数。算法详细解释:1.解释为什么要有离散的这么一个过程? 刚开始以为999.999.999这么一个数字,对于int存储类型来说是足够了。 还有只有500000个数字,何必要离散化呢? 刚开始一直想转载 2016-10-20 21:42:28 · 339 阅读 · 0 评论 -
POJ1990MooFest
题意:牛的听力为v,两头牛i,j之间交流,需要max(v[i], v[j])*dist(i,j)的音量。应该说,题意是说,v[i]越小,听力越好。求所有牛交谈时叫声总和∑(max(v[i],v[j])*abs(dist[j]-dist[i]) ) )思路:先对牛按照v从小到大排序。对于牛i,它与比他听力还小的牛之间交谈需要音量都是v[i],再乘以之间的距离就可以了。在排好序后,假设:c原创 2016-10-20 21:36:48 · 386 阅读 · 0 评论 -
POJ2352Stars(树状数组)
题意:按照y升序给你n个星星的坐标,如果有m个星星的x,y坐标均小于等于星星A的坐标,那么星星A的等级为m。分析:是一道树状数组题。举例来说,以下是题目的输入:51 15 17 13 35 5由于y坐标是升序的且坐标不重复,所以在星星A后面输入的星星的x,y坐标不可能都小于等于星星A。假如当前输入的星星为(3,3),易得我们只需要去找原创 2016-10-18 21:49:38 · 369 阅读 · 0 评论 -
HDU3974Assign the task(DFS序+线段树)
/*translation: 一个公司里面每个员工都有一个顶头上司,一旦给某个员工分配任务后,这个员工以及该员工的所有下属都在做该任务。 有若干操作,分配给员工任务以及查询该员工正在执行的任务。solution: 线段树,时间戳一般化 很明显该公司的所有员工间的关系可以用一颗多叉树来表示。然后就是dfs给这棵树打上时间戳。根据新分配的id号码 将其节点对原创 2017-09-22 11:27:58 · 309 阅读 · 0 评论 -
HDU1540Tunnel Warfare(线段树区间合并)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1540题目大意:一条线上的点,D x是破坏这个点,Q x是表示查询以x所在的最长的连续的点的个数,R是恢复上一次破坏的点。分析:线段树结点 设置一个 ll 记录区间左端点开始的最大连续个数, rl 记录区间右端点开始的最大的连续个数,ml表示该区间最大的连续点的个原创 2017-03-15 18:33:50 · 323 阅读 · 0 评论 -
ZOJ1610Count the Colors(线段树成段更新染色)
链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1610题目大意:在一条长度为8000的线段上染色,每次把区间[a,b]染成c颜色。显然,后面染上去的颜色会覆盖掉之前的颜色。求染完之后,每个颜色在线段上有多少个间断的区间。注意:因为染色的是区间原创 2017-03-14 16:57:04 · 416 阅读 · 0 评论 -
hdu4027Can you answer these queries(区间更新查询+lazy)
题意:给一个数组序列, 数组长度为100000,现在有两种操作, 一种操作是将某一个固定区间所有数开方(向下取整),另一种操作是询问某个区间的所有数字之和。一句话题解:每个数最多才能被开方八次, 所以对于长度为n的数组,开方的次数最多为8*n。因为是向下取整,所以节约时间的方法主要是处理被开方数为1的情况。#include#include#includeusing nam原创 2017-03-14 13:35:49 · 368 阅读 · 0 评论 -
HDU2795Billboard (线段树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795题意:有一块尺寸为h*w的矩形长板,要在上面贴1*wi的海报n张,选择贴海报的位置是:尽量高,同一高度,选择尽量靠左的地方。要求输出每张海报的高度位置。一句话题解:用最底层的单个结点(也就是当tree[i].l==tree[i].r时的点)来表示高度的.......#inc原创 2017-03-14 12:47:10 · 381 阅读 · 0 评论 -
hihoCoder1116Calc(线段树区间合并)
描述现在有一个有n个元素的数组a1, a2, ..., an。记f(i, j) = ai * ai+1 * ... * aj。初始时,a1 = a2 = ... = an = 0,每次我会修改一个ai的值,你需要实时反馈给我 ∑1 f(i, j)的值 mod 10007。输入第一行包含两个数n(1接下来q行,每行包含两个数i, x,代表我把ai的值改为了原创 2016-11-05 20:45:07 · 437 阅读 · 0 评论 -
LightOj1080Binary Simulation(区间更新单点查询)
#include#include#include#include#include#includeusing namespace std;const int maxn = 100005;int C[maxn];char a[maxn];int lowbit(int lo){ return lo & (-lo);}void modify(int pos, int va原创 2016-10-23 21:35:22 · 408 阅读 · 0 评论 -
HDU4288Coder(线段树+离线查询)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1540题目大意:1:add x 就是把x插进去 2:delete x 就是把x删除3:sum 就是求下标%5=3的元素的和。题目要求插入和删除后都要保证数列有序分析:先读入所有的数据,离散化后建立线段树。在每个结构体中设立一个cnt变量用于原创 2017-03-15 18:48:35 · 444 阅读 · 0 评论 -
HDU1542Atlantis(线段树+离散化+扫描线)
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1542首先附上大佬们的博客:http://www.cnblogs.com/scau20110726/archive/2013/03/21/2972808.htmlhttp://blog.youkuaiyun.com/xingyeyongheng/article/details/8927732#原创 2017-03-16 16:59:14 · 962 阅读 · 0 评论 -
HDU5475An easy problem(线段树单点更新)
An easy problemTime Limit: 8000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2077 Accepted Submission(s): 853Problem DescriptionOne day, a原创 2017-06-01 13:53:25 · 503 阅读 · 0 评论 -
HDU6070Dirt Ratio(二分+线段树)
来自大佬的讲解:http://blog.youkuaiyun.com/jerans/article/details/76651326题目:http://acm.hdu.edu.cn/showproblem.php?pid=6070题意:定义一个区间的值为(不同数的个数/区间长度),求所有区间内的最小值有一种01分数规划的思想,二分结果值now,这原创 2017-08-04 17:02:42 · 295 阅读 · 0 评论 -
Codeforces 833B - The Bakery(DP+线段树)
D. The Bakerytime limit per test2.5 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputSome time ago Slastyona the Sweetmaid dec原创 2017-08-06 15:25:39 · 423 阅读 · 0 评论 -
HDU5877WeakPair(线段树+离散化+DFS)
解题思路:【题意】给你一棵有根树,一个定值k,以及树上每个结点的值a[i]对于有序对(u,v),如果(1)u是v的祖先,且(2)a[u]*a[v]问树中有多少对有序对(u,v)是弱的【类型】离散化+dfs+树状数组【分析】对于要求(1),u是v的祖先,我们可以采取dfs遍历到v时,它上方的所有结点必定都是满足第一条件的u原创 2017-08-25 19:15:43 · 536 阅读 · 0 评论 -
HDU1556 color the ball(树状数组)向下查询,向上统计
解题思路:其实这道题可以把每次染色的点抽象为每次涂改的区间,然后对要查询的点所在区间的更新次数进行求和这样就可以在时间上,大大缩短,查询和统计的时间复杂度都为log(n)树状数组中的每个节点都代表了一段线段区间,每次更新的时候,根据树状数组的特性可以把b以前包含的所有区间都找出来,然后把b以前的区间全部加一次染色次数。然后,再把a以前的区间全部减一次染色次数,这样就修改原创 2016-10-18 21:46:20 · 450 阅读 · 0 评论