线段树
文章平均质量分 67
Jinx_jinx_again
啊啊啊啊哈哈哈
展开
-
Hdu 5200 Trees (离线线段树)
题目大意:校门外栽满了不同高度的树,每一次询问是 如果砍掉所有高度不超过q的树,那么还有多少个连续的块。思路分析:记录左连续和 右连续和 用来维护区间的连续块的数量。即seg[num] = seg[num如果中间部分连起来 那么减一即可。#include #include #include #include #define maxn 50原创 2015-04-09 20:47:47 · 669 阅读 · 0 评论 -
poj 2482 Stars in Your Window (线段树扫描线)
题目大意:求一个窗口覆盖最多的星星的权值。思路分析:每一个星星看成左下点为x y右上点为x+w-1 y+h-1 的矩形。然后求出最大覆盖的和。#include #include #include #include #define lson num<<1,s,mid#define rson num<<1|1,mid+1,e#define max原创 2014-07-20 10:00:23 · 696 阅读 · 0 评论 -
hdu 4122 Alice's mooncake shop (线段树)
题目大意:一个月饼店每个小时做出月饼的花费不一样。储存起来要钱,最多存多久。问你把所有订单做完的最少花费。思路分析:ans = segma( num[]*(cost[] + (i-j)*s) )整理一下会发现式子就是 cost[]-j*s + i*s 对于每一个订单,我们把i拿出来分析所以也就用cost - j*s 建树。然后在储存期间找到最小的花费就原创 2014-06-29 14:36:26 · 953 阅读 · 0 评论 -
SPOJ GSS5 Can you answer these queries V (线段树)
比GSS3 麻烦在于要判断两个区间的相交性。分为三种情况.1. x1 y1 x2 y2 这种情况就是 x1 y1 的右最大 + sum【y1 x2】 + x2 y2的做最大2.x1 x2 y2 y1 其实就是 y1==y2的时候要么区间在 x2-y2之间要么区间的头在 x1 x2之间,尾在 x2 y2之间3. x1 x2 y1 y2。这种情况原创 2014-05-18 00:09:34 · 1228 阅读 · 0 评论 -
ZOJ 3772 Calculate the Function (线段树 + 矩阵)
思路分析:遗憾不知道矩阵的构造。线段树上比较水的矩阵。。。 M[x] = [1 A[x]] [1 0 ] 就有[ F[R] ] = M[R] * M[R-1] * ... * M[L+2] * [F[L+1]][F[R-1]]原创 2014-05-11 23:15:57 · 930 阅读 · 0 评论 -
SPOJ GSS4 Can you answer these queries IV (线段树)
题目大意:给出N个数 0 操作 把 l ----- r之间的数全部开平方1 操作 输出 l -----r 之间的和思路分析:判断区间里的数字是否全相同。如果相同,将cov 置为该数查询的时候和更新的时候,如果碰到cov != -1 的 就直接返回就可以了#include #include #include原创 2014-05-17 17:09:33 · 1168 阅读 · 0 评论 -
SGU 319 Kalevich Strikes Back(线段树扫描线)
题目大意:n个矩形,将一个大矩形分成 n+1 块。矩形之间不重合,但是包含。求这n+1个矩形的面积思路分析:用线段树记录他们之间的父子关系。然后dfs 计算面积。当给出的矩形上边的时候,就要记录到该矩形的父亲去。#include #include #include #include #define lson num<<1,s,mid#define rs原创 2014-04-26 01:26:44 · 925 阅读 · 0 评论 -
hdu 3642 Get The Treasury (三维的扫描线)
题目大意:给出N个立方体。求一个三维空间中被包围三次的空间的体积之和。思路分析:发现Z的范围很小。那么我们可以枚举Z轴,然后对 x y做扫描线。而且不用枚举所有的Z ,只需要将Z离散化之后枚举。#include #include #include #include #define maxn 2222#define debug puts("fuck!原创 2014-05-09 23:53:24 · 1105 阅读 · 0 评论 -
ZOJ 3632 Watermelon Full of Water (线段树 区间更新 + dp)
题目大意:让每天都能吃到西瓜。最少需要花多少钱。思路分析:dp[pos] 就表示 要让 前i天每天都有西瓜吃,最少需要花多少钱。那么如果你买这个西瓜的话。那么这个西瓜能吃的持续时间都要更新一下。然后再在每个西瓜的更新部分取最小的,就可以是这个点所能得到的最小值。其实就是 dp[i] = min (dp[i] , dp[ j - k +1] + a[j]);原创 2014-05-17 00:52:47 · 1109 阅读 · 0 评论 -
hdu 1255 覆盖的面积 (线段树扫描线 计算两次覆盖的面积)
思路分析:主要函数是在pushup和更新自己的时候。要考虑到自己覆盖了的话 那么子树上的覆盖了一层的就要多加一层。用len 数组的第二维分别计算 这个区间的长度 覆盖一次的长度 覆盖两次的长度。自习思考一下之间的关系。保证len[0]=len[2]+len[1];#include #include #include #in原创 2014-04-09 19:44:11 · 903 阅读 · 0 评论 -
hdu 3328 Flipper
题目大意:桌面上方了N 张牌,有正面朝上和反面朝上的。然后执行两种操作,R和LR就是把最右边的一堆牌反转一下放在右边数第二个上面也是是如果ABD C执行了R就是CBAD了那么用并查集维护他们在每个堆上的位置,用线段树维护他们的正反状态。最后会合成一个堆,所以他们最后的位置是独一无二的,直接找原创 2014-04-09 20:22:37 · 868 阅读 · 0 评论 -
hdu 2492 Ping pong (线段树)
题目大意:对于任意一组 x,y,z 满足xa[y]>a[z] ) 如果有其中一个元素不同,则称为不同。问给出的序列里有多少组不同。思路:用线段树维护 一个数左边有多少个数比其小右边有多少个数比其大。然后相乘就得当前y可以得到的数量。#include #include #include #include #define lson n原创 2014-04-20 23:27:29 · 924 阅读 · 0 评论 -
SPOJ GSS3 Can you answer these queries III (线段树)
题目大意:求区间最大子区间的和。思路分析:记录左最大,右最大,区间最大。注意Q_L 和 Q_R 就好。#include #include #include #include #define lson num<<1,s,mid#define rson num<<1|1,mid+1,e#define maxn 55555using原创 2014-05-07 00:16:21 · 1096 阅读 · 0 评论 -
hdu 3255 Farming (线段树扫描线球体积并)
把给出的权值看成是立方体的高,然后求出体积并。原创 2014-07-20 22:09:34 · 576 阅读 · 0 评论 -
CodeForces - 383C Propagating tree(dfs + 线段树)
题目大意:给出一棵树,树上每个节点都有权值,然后有两个操作。1 x val 在结点x上加上一个值val,x的儿子加上 -val,x的儿子的儿子加上 - (-val),以此类推。2 x 问x节点的值。思路分析:每个节点上加值都是给自己的儿子节点加,而且这个是颗树。比如样例上的,如果你给node 1加一个值,那么五个节点都加。再给node 2加个值,2的儿子节点也加原创 2014-07-23 10:05:15 · 899 阅读 · 0 评论 -
Hdu 4419 Colourful Rectangle(线段树扫描线)
题目大意:给出多个不同颜色的矩形,求最后覆盖的颜色的面积。思路分析:我是自己手动暴力枚举。比赛的时候漏了一种情况。RGB 可以从 RG+RB组合来(只是举例,就是说可以从两种颜色组合而来)。然后就只需要维护所有的颜色用扫描线来判断。#include #include #include #include #define MAXN 42222u原创 2014-09-24 00:03:17 · 1079 阅读 · 0 评论 -
hdu 4638 Group (莫队算法 || 离线线段树)
题目大意:n个人的编号是从1 - n ,现在他们无序的站成一排。第 id 号人和 id-1 id +1 号人是朋友,朋友之间可以组成group。一个group的值等于他们人数的平方。然后有m次询问,问给出的l r 之间能构成group值的和的最大值的group数。思路分析:首先,我们面临着假设你知道这个区间有多少个group 你能知道得到最大值的时候grou原创 2014-08-11 20:12:03 · 948 阅读 · 0 评论 -
Hdu 4967 Handling the Past (线段树)
题目大意:关于网络阻塞命令延迟的处理。命令就分为三种对栈的处理。但是如果接收到一个操作,它后面的操作都要先取消不做,再做这个操作,再做之前取消了的操作。思路分析:题目也就转化成了,给出一个时间t接收到peak操作,找到第一个最大的 l ,使得 sum[l - t] > 0...然后的问题我们就是如何确定最大的l。我们记录sum的同时再记录一个右边最大。然后我原创 2014-08-20 16:33:31 · 908 阅读 · 0 评论 -
POJ 3321 Apple Tree (dfs+线段树)
题目大意:修改树上的节点,然后求子树的和。思路分析:dfs 重新编号,烂大街了。。。#include #include #include #include #define maxn 100005#define lson num<<1,s,mid#define rson num<<1|1,mid+1,eusing namespace std;int num[原创 2014-07-31 20:35:42 · 604 阅读 · 0 评论 -
hdu 3016 Man Down (线段树 + dp)
题目大意:是男人就下一般层。。。没什么可以多说的吧。注意只能垂直下落。思路分析:后面求最大值的过程很容易想到是一个dp的过程 。因为每一个plane 都只能从左边 从右边下两种状态。然后我们所需要处理的问题就是 ,你如何能快速知道往左边下到哪里,往右边下到哪里。这就是线段树的预处理。讲线段按照高度排序。然后按照高度从小到大加入到树中。然后去寻找左端点原创 2014-08-06 20:59:33 · 882 阅读 · 0 评论 -
POJ 1785 Binary Search Heap Construction (线段树)
题目大意:给出的东西要求建立一个堆,使得后面的数字满足堆的性质,而且字符串满足搜索序思路分析:用线段树的最大询问建树。在建树之前先排序,然后用中序遍历递归输出。注意输入的时候的技巧。。。#include #include #include #include #define lson num<<1,s,mid#define rson num<<1|1,m原创 2014-06-20 23:19:38 · 868 阅读 · 0 评论 -
POJ 2828 Buy Tickets (线段树)
题目大意:排队有人插队,每一次都插到第 i 个人的后面。最后输出顺序。思路分析:你会发现,如果反向处理的话,你就知道这个人是第几个了。那么问题一下子就简化了。就是在线段树上找第几个空位置就行了。#include #include #include #include #include #define lson num<<1,s,mid#defi原创 2014-07-27 14:51:28 · 676 阅读 · 0 评论 -
codeforces Beta Round #19 D. Point (线段树 + set)
题目大意:对平面上的点进行操作。add x y 在 (x,y )上加一个点。remove x y 移除 (x,y)上的点。find x y 求出在(x,y)右上角离他最近的点,优先级是靠左,靠下。思路分析:find 操作 比较麻烦。要保证x大的同时还要确保x最小,而且该x上还要有点。这样要找大的时候要小的,就是在线段树上选择性的进入左子树还是右子树。所以原创 2014-08-01 10:54:56 · 774 阅读 · 0 评论 -
codeforces 444 C. DZY Loves Colors(线段树)
题目大意:1 l r x操作 讲 [l,r]上的节点涂成x颜色,并且每个节点的值都加上 |y-x| y为涂之前的颜色2 l r 操作,求出[l,r]上的和。思路分析:如果一个区间为相同的颜色。那么我们才可以合并操作。所以我们之前找相同的区间就好。但是问题是如何合并操作。那么我们定义一个val 表示这个区间每个位置上应该加上的值。pushdown 的时候这原创 2014-07-08 10:58:10 · 1027 阅读 · 0 评论 -
POJ 2750 Potted Flower (单点修改求线段树上最大子序列和)
题目大意:在一个序列上每次修改一个值,然后求出它的最大的子序列和。思路分析:首先我们不考虑不成环的问题。那就是直接求每个区间的最大值就好了。但是此处成环,那么看一下下面样例。51 -2 -3 4 5那么你会发现 max = sum - min 也就是和减去最小区间和也可以得到。所以我们最后要得到的就是两个东西。注意题目中说的不能全部取得。所以还要判断原创 2014-07-28 08:55:54 · 853 阅读 · 0 评论 -
Codeforces Round #216 (Div. 2) E. Valera and Queries (BIT)
题目大意:给出很多条分布在 x 轴上的线段。然后给出很多点集,问这些点集分布在多少条不同的线段上。思路分析:把点集分散成若干条线段。如果点集做出的线段包含了某一条给出的线段的话,也就是说这个点集上不会有点在这条线段上。所以我们就是求出 点集做出的线段包含了多少个给出的线段就可以了。那么也就是比较l r的大小,排序之后用BIT#include #in原创 2014-07-23 15:18:08 · 677 阅读 · 0 评论 -
Codeforces Beta Round #12 D. Ball (线段树)
题目大意:n个女性中,如果有一个女性的三维比这个女性的三维原创 2014-07-22 23:15:24 · 651 阅读 · 0 评论 -
hdu 4819 Mosaic (二维线段树)
T到死。多了一个更新第一维的函数。多了一个logn的复杂度。其实后来看了题解以后知道 更新一维可以直接在建立二维的时候就完成。再加入就是多此一举了。#include #include #include #include #define maxn 805#define inf 0x3f3f3f3fusing namespace std;int Min[max原创 2014-03-20 22:47:42 · 955 阅读 · 1 评论 -
hdu 4747 Mex(线段树)
将所有的数换种写法mex = mex(1,1)+mex(1,2)+...+mex(1,n)+mex(2,2)+...+mex(2,n)+...mex(n,n).应该知道如何算出 左端点不动的mex 也就是 mex(i,i) +....+mex(i,n)...那么如何进行下一次 就要删除左端点。更新的时候也好想到。但是要知道 mex(i,i原创 2014-03-28 00:44:07 · 1007 阅读 · 0 评论 -
Codeforces Round #197 (Div. 2) D. Xenia and Bit Operations
居然没想到是线段树,在此给BOBLEE 跪。用一个RANK 记录深度 1就取或 0取异或线段树的单点更新。#include #include #include #include #define lson num<<1,s,mid#define rson num<<1|1,mid+1,e#define maxn 1<<19using namesp原创 2013-08-27 20:26:41 · 1352 阅读 · 0 评论 -
POJ 2155 Matrix 二维线段树
题目大意:一个二维坐标轴上有很多点,点不是0就是1。然后又两种操作。C:改变以 (x1, y1) 为左上顶点 (x2,y2 )为右下顶点 中的每一个点 0变1 1变0Q:输出 A【x】【y】然后每次改变都取异或 这样的话就意味着改变偶数次就变回来了 奇数次的话就是做了改变的#include #include #include #define maxn 10原创 2013-08-15 15:14:22 · 833 阅读 · 0 评论 -
hdu 4614 Vases and Flowers (二分 线段树)
题目大意:爱丽丝有N个花瓶,每个花瓶最多放一朵花。然后又如下两个操作。1:A B 从第A个花瓶开始,往后依次插B朵花,直到不能插为止。如果一朵花都不能插入就输出“can.....”,否则输出第一个插花位置和最后一个插花位置。2:A B 输出A B 之间有多少朵花 然后将这些花瓶清空。当时比赛的时候始终找不到办法求出 最后一个插花位置。 也想过二分 但是想着怕原创 2013-08-26 22:06:54 · 969 阅读 · 0 评论 -
hdu 1166 敌兵布阵
线段树单点更新原创 2013-07-15 20:56:35 · 945 阅读 · 0 评论 -
SPOJ 1043 1043. Can you answer these queries I
思路:用TREE记录节点的最大连续和,LEF记录左边开始的最大连续和,RIG记右边开始的最大连续和然后处理的时候就是比较左边最大,右边最大 中间区间的问题其中这个query 只能膜拜了。。。大大缩减了时间。放弃治疗的我只会用三个函数传参就要传出翔。flag == -1表示要左边最大flag == 1 表示要右边最大然后ans在找到的区间的同时进行比较。我已可入灵魂原创 2013-08-12 23:38:28 · 1081 阅读 · 0 评论 -
HDU 4267 A Simple Problem with Integers
思路:开始直接用标记,最后发现他们是离散的点。几乎就相当于单点更行了。欧。为何放弃治疗。。。最后看的是 http://blog.csdn.net/ophunter/article/details/9455723很详细。LCM 最小公倍数学长还是很狂拽酷炫的。哎。我已可入灵魂。#include #include #include #include #define MAX原创 2013-07-25 20:45:41 · 817 阅读 · 0 评论 -
hdu 1828 Picture(线段树扫描线矩形周长并)
线段树扫描线矩形周长并#include #include #include #include #define MAXN 22222using namespace std;int len[MAXN<<2];bool lbd[MAXN<<2],rbd[MAXN<<2];int numseg[MAXN<<2];int cnt[MAXN<<2];struct line{原创 2013-07-23 22:56:53 · 1063 阅读 · 0 评论 -
hdu 1542 Atlantis
线段树扫描线 矩形面积并原创 2013-07-23 15:56:18 · 879 阅读 · 0 评论 -
POJ 2777 Count Color
POJ 2777 线段树的区间合并。原创 2013-07-20 17:34:06 · 898 阅读 · 0 评论 -
POJ 3667 Hotel
线段树区间合并原创 2013-07-19 14:35:08 · 1070 阅读 · 0 评论 -
hdu 2795 Billboard
线段树单点更新...原创 2013-07-15 23:04:02 · 925 阅读 · 0 评论