
线段树
zyz_3_14159
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LightOJ-1097-线段树
题目大意:有一个奇数组成的数列,每次选第i个元素,从val[i]到最后删除,每次下标加上val[i]-1;题目解析:用线段树暴力更新预处理;AC代码:#include#include#include#include#include#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1using namespace std;typ原创 2016-11-29 21:28:46 · 246 阅读 · 0 评论 -
HDU-4722-线段树优化dp
题目大意:有n个人站成一排,现要求把他分成几组,要求每组的长度不能大于l并且每组最后一个人的身高必须严格大于前一个组的最后一个人的身高,每一组的得分为B[i]^2-B[i-1],问总得分的最大值是多少;题目解析:定义dp[i]表示以i作为结尾所能够取得的最大得分,那么dp[i]=max(dp[j]+val[i]*val[i]-val[j]);i-lAC代码:#include#in原创 2017-04-15 13:25:11 · 354 阅读 · 0 评论 -
POJ-2104-线段树,bindary search
题目大意:给定n个数字和m次询问,问区间[l,r]上第k大的数字是多少;题目解析:线段树,每个节点保存的是一个序列,所以pushup的时候需要用merge,归并排序;如果是第k大的,那么小于等于那个数字的就有k个,所以可以二分;AC代码:#include#include#include#include#include#include#define lson l,m,rt<<原创 2016-11-26 23:54:07 · 265 阅读 · 0 评论 -
玲珑杯-1063-线段树
题目大意:给定n个数字,有两种操作,第一种是把第i个元素的值改为x,第二种求区间[l,r]的方差*(r-l+1)^2;题目解析:线段树,每个节点维护元素的和与平方和;AC代码:#include#include#include#include#include#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1using names原创 2016-11-26 18:48:11 · 242 阅读 · 0 评论 -
LightOJ-1083-线段树
题目大意:给定一张柱形图,每个柱高度不一样,但是宽度都一样,需要求出一个矩形面积的最大值,这个矩形别柱形图所围成的图形所覆盖;题目解析:对于每个柱,假定以他的高作为高,那么就需要求出尽可能靠左和靠右的使得高度大于那个;这就用到区间了,直接线段树,节点保存区间内的最小值;枚举每个元素的时候,求最左和最右的时候,可以二分,因为区间是具有单调性的,这样o(n*logn*logn)正好过。AC代码原创 2016-11-25 11:58:06 · 292 阅读 · 0 评论 -
LightOJ-1093-线段树
题目大意:给定n个数字,需要找出所有长为d中最大值减去最小值的最大值;题目解析:直接线段树,分开来求出最大值和最小值;AC代码:#include#include#include#include#include#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1using namespace std;const int inf=原创 2016-11-24 23:03:48 · 222 阅读 · 0 评论 -
LightOJ-1089-线段树,离散化
题目大意:给定n的区间和m的询问,每次询问求出有多少个区间包含所给出的点;题目解析:用线段树做,把叶子节点想象成端点,并且维护cover即被几个区间所包含;这样需要把所有端点都sort一下,因为端点数值太大,需要离散化一下并且去重,找的时候因为排过序了所以只要二分搜索一下就ok了;初始化线段树的时候把所有区间所对应的index二分出来来进行更新;AC代码:#include#inclu原创 2016-11-24 15:18:06 · 319 阅读 · 0 评论 -
LightOJ-1087-线段树
题目大意:给定一串数字,有两种操作,第一种是在最后面插入一个元素,第二种是查询第i个元素,如果有就输出并删除;题目解析:线段树先构造出n+m,每个区间我们需要维护有多少个数字,如果当前查询的是pos,左二子的数字>=pos,那么就查询左二子,否则pos-=num[rtAC代码:#include#include#include#include#include#define ls原创 2016-11-24 12:43:19 · 218 阅读 · 0 评论 -
poj-3468-线段树,区间更新
题目大意:跟普通线段树不同的就是需要区间更新;题目解析:注意懒操作和区间所有元素更新时sum要乘以区间内元素的个数;AC代码:#include#include#include#include#include#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1 using namespace std;typedef long l原创 2016-11-22 23:17:42 · 267 阅读 · 0 评论 -
LightOJ-1112-线段树
题目大意:给定一个区间,有三种操作,第一种是把第i个元素的值清空,第二个是往第i个元素中加上v的值,第三种是询问第区间[i,j]中的总和是多少;题目解析:线段树,清空操作设置一个标记就可以了,update的时候直接输出;AC代码:#include#include#include#include#include#define lson l,m,rt<<1#define rso原创 2016-11-21 21:10:31 · 274 阅读 · 0 评论 -
LightOJ-1678-线段树
题目大意:给定一串二进制字符串,有两种操作,一种是查询第i个元素是什么,还有一个是将一个区间内所有元素转化(0->1,1->0);题目解析:看到区间加查询,肯定线段树了,记录当前转化过几次即可;AC代码:#include#include#include#include#include#include#define PI acos(-1.0);using namespace原创 2016-11-21 20:16:07 · 219 阅读 · 0 评论 -
LightOJ-2991-线段树
题目大意:有个n条线段组成的起重机,有m次询问,每次询问将第Si-Si+1之间的角度变为degree,问起点到终点的向量是多少;题目解析:线段树好题,把它想象成一个一个区间[l,r],我们需要维护从l到r的向量和角度;如果我们要是一条折线旋转一个角度,就等于其中各个向量旋转一样的角度,还有一个细节就是线段树的懒操作(用到的时候我再更新)sd[];AC代码:#include#inclu原创 2016-11-20 14:44:09 · 255 阅读 · 0 评论 -
POJ-1769-线段树,dp
题目大意:有n个sorter,每个可以讲对应区间内的所有数升序排序,问至少要选择几个sorter,使得最大数出现在任意位置最后都能到达最后一个;题目解析:只要考虑极端情况,即最大数就出现在第一个,那么有点像01背包,定义dp[i][j]为用到第i个sorter最大值在j所需要最少的sorter,那么ti!=j的时候,dp[i][j]=dp[i-1][j],ti=j的时候,dp[i][j]=mi原创 2016-11-30 15:51:30 · 1473 阅读 · 0 评论 -
LightOJ-1399-线段树求区间相同颜色连续的最大长度
题目大意:区间相同颜色连续的最大长度题目解析:线段树节点保存左右端点颜色,从左右开始的最大长度和答案,pushup和query的时候考虑左儿子右端点和右儿左端点的颜色是否一样需要特判;AC代码:#include#include#include#include#include#define lson rt<<1#define rson rt<<1|1using namesp原创 2017-11-15 23:54:55 · 457 阅读 · 0 评论