线段树
文章平均质量分 72
尉水风
这个作者很懒,什么都没留下…
展开
-
Just a Hook
区间更新+区间查询In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of the heroes. The hook is made up of several consecutive metallic sticks which are of the same lengt原创 2017-08-08 11:52:35 · 255 阅读 · 0 评论 -
线段树需要开4倍区间大小的数组的原因
struct list{ int left; int right; int _max;}tree[maxn*4];如上述代码所示,我们在写线段树的模板时,别人会告诉我们开4倍的数组就不会溢出了,然而原因是什么,现在证明一下首先线段树是一棵二叉树,最底层有n个叶子节点(n为区间大小)那么由此可知,此二叉树的高度为,可证然后通过等比数列求和求得二叉树的节点个数,具体公式为,(x为原创 2017-12-25 18:43:43 · 4793 阅读 · 5 评论 -
Color the ball
区间更新+点查询N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a Input每个测试实例第一行为一个整数N,(N 当N = 0,输入结束。Output每个测试实例输出一行,包括N个整数,第I个数代表第I个气球总共被涂色的次数。Sample Input31 12 23 331 11 21 30Sample原创 2017-08-08 17:19:31 · 262 阅读 · 0 评论 -
I Hate It
点更新+区间查询很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。 这让很多学生很反感。 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。Input本题目包含多组测试,请处理到文件结束。 在每个测试的第一行,有两个正整数 N 和 M ( 0学生ID编号分原创 2017-08-08 11:11:03 · 261 阅读 · 0 评论 -
线段树模板
//在我的理解里线段树并不是数据结构上所谓的树,而是通过数组模拟,通过//函数进行下标转换(查询) #include#define maxnusing namespace std; struct list{ int left; int right; int _max; int weight; //区间 }tree[maxn*4]; //乘4可以保证不会越界原创 2017-08-08 09:51:27 · 264 阅读 · 0 评论 -
敌兵布阵
点更新+区间查询C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视。 中央情报局原创 2017-08-08 09:48:20 · 427 阅读 · 0 评论 -
Billboard
线段树的题目,题目已经明确说明广告要尽量贴在靠近顶部同时靠近左边的地方,那就从线段树最左端的树叶开始查找,若找到可以贴广告的位置,就用该节点的记录的广告牌的宽度减去广告的宽度,其父节点记录左右节点中的最大值,若父节点所记录的值都小于广告的宽度,则表明父节点所控制的这个区间里无法贴下这张广告,广告牌实际用到的高度也不会超过广告的数目Problem DescriptionAt th原创 2017-08-12 19:57:22 · 283 阅读 · 0 评论 -
Sort it
这道题目数据很水,按照题目给的数据范围来说,用冒泡排序肯定会超时,然而用冒泡排序用时只有93ms,但是用线段树来解体的话只有31ms解题思路:看到这道题的时候,感觉和冒泡排序很像,但是算一下时间复杂度却会超时,那么我们可以用冒泡的思想来解题,看过这几个样例之后,可以发现这么一个规律:一个数必然与在它前面比它大的数字进行交换,根据这个规律,建立线段树点更新,区间查询,从左往右依次读入数据,比原创 2017-08-12 19:26:21 · 324 阅读 · 0 评论 -
Vases and Flowers
这道题目很多人用二分+线段树来做,但是(可能我太水了吧)想不到怎么用二分,只好照着常规思路来做题意:两种操作:1.从a号花瓶开始插入f朵花,每个花瓶只能有一朵花,且有花的花的花瓶不能被放入 2.清除一个区间内花瓶中的花 注意花瓶的编号是0~n-1解题思路:这就是两种不同的区间更新,先设置一个结构体struct list{ int num; int weight;}tre原创 2017-08-14 16:42:35 · 283 阅读 · 0 评论 -
Count the Colors
这道题挺不错的,但我总是卡在一些细节上,这道题也可以用并查集做,而且时间和空间效率都比线段树高(线段树的一些区间问题可以用并查集来解决)题解:如果我讲的不清楚请看这位博主的文章:点击打开链接首先,题意是在一些区间内涂色,求每种颜色色块的个数(如果这种颜色不能看见,则不需要输出这种颜色的色块个数),注意这些点和颜色的范围是0~8000,而不是0~n;左端点必定小于右端点(已验证);题目给原创 2017-08-12 12:30:29 · 330 阅读 · 0 评论 -
Assign the task
数据据说很水,用并查集写的There is a company that has N employees(numbered from 1 to N),every employee in the company has a immediate boss (except for the leader of whole company).If you are the immediate bo原创 2017-08-09 21:33:03 · 441 阅读 · 0 评论 -
Can you answer these queries?
这道题目如果不剪枝的话会超时,众所周知,1的平方根还是1,所以当某个区间下的值全为1时,就不需要再开方了,(一个极大的数,比如,2^63=9223372036854775808,6次开方之后就是1.776034517001307,取整之后就是1,最多7次update之后这个区间的值就不需要在更新了)这时就需要一个记录区间长度的lenth变量(就是记录这个区间有多少个数)同时题目要求求和也需要定义一原创 2017-08-09 10:47:50 · 381 阅读 · 0 评论 -
求和
Hey, welcome to HDOJ(Hangzhou Dianzi University Online Judge). In this problem, your task is to calculate SUM(n) = 1 + 2 + 3 + ... + n. InputThe input will consist of a series of integers n,原创 2017-08-08 19:57:11 · 290 阅读 · 0 评论 -
蓝桥-ALGO-8 操作格子
算法训练 操作格子 问题描述有n个格子,从左到右放成一排,编号为1-n。共有m次操作,有3种操作类型:1.修改一个格子的权值,2.求连续一段格子权值和,3.求连续一段格子的最大值。对于每个2、3操作输出你所求出的结果。输入格式第一行2个整数n,m。接下来一行n个整数表示n个格子的初原创 2018-03-10 09:48:36 · 195 阅读 · 0 评论