![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线段树
文章平均质量分 76
AShallWe
MorningStar
展开
-
hdu1166线段树
线段树入门题,线段树除开它的叶子节点其余为区间。建立线段树的操作可以在wiki上搜索。这道题有三个操作,query和sub和addsub和add的使用的函数一样,用update来更新,不同的是要用sub传值的时候把delta加个负号。线段树的建树;bulid函数采用递归的形式来进行建树,只有当为叶子节点才会输入进数字。但某一分支的叶子节点输入完毕,用了push_up函数原创 2015-08-11 17:08:09 · 306 阅读 · 0 评论 -
POJ 2828 线段树
线段树单点更新这道题写线段树是很简单的操作,但是最重要的是思路,因为很难想到。因为是插队插入的,所以换个方向思考,最后插入的一定是该位置,然后忽略该位置,后面同理。主要思路:现在看样例这组数据,因为上面已经说过了,所以我们先要把所有的输入存储起来,于是从最后一条输入来看,3 69(位置先自加1)说明了前面是有2个空位的,于是这时候就要插入到第3个位置中(原因在于此时序列中没有其他数字,原创 2015-09-21 21:02:02 · 957 阅读 · 0 评论 -
POJ 2886 线段树
该题和poj2828的思路非常类似。题意:有N个人参加一个游戏,每个人手上都拿了一张卡片,每张卡片的数字都是非0的,现在从第K人开始,第K人离开后,这时候根据第K人手上拿着的卡片的数字,决定下一个人是谁,如果这个数字m为正数,那么其实相当于向右数m个,如果这个数字为负数,那么其实相当于向左数m个数的位置(所有的数法都是要排除自己)。现在构建一颗类似于poj2828的线段树,这时候主要的原创 2015-09-23 20:02:28 · 2308 阅读 · 0 评论 -
HDU 2796 线段树
线段树单点更新题意:一个广告板,知道它的长和宽,现在有N条信息需要在板上显示,每天信息都有自己的宽度,长度都为1。现在问你每条信息在哪个位置。思路:利用线段树,将有多少条信息或者高度作为线段树的最大区间,然后题目中说明要如果不能放在最上边(topmost),那么就放在最左边的上边(leftmost)。现在以样例为准来说明,依据样例数据,那么线段树的区间为1~3,那么首先宽度为2原创 2015-09-20 15:55:33 · 563 阅读 · 0 评论 -
POJ 2481 线段树
题意:给你一个区间,问你有多少个比这个区间大的区间,区间大小比较按照这个规则 If Si Ej - Sj, we say that cowi is stronger than cowj.思路:咋一看这个根本没法想象到和线段树结合到一起,(所以说线段树之类的题最重要的是思路=-=,而不是算法)我们先暂时想一个思路,如果把这些区间当做点来看的,那么对于这道题要求的值其实就是这个点原创 2015-10-06 14:57:30 · 487 阅读 · 0 评论 -
Codeforces Yandex.Algorithm 2011 Round 1 85D 线段树
此题和POJ2828andPOJ2886其实属于同一类型的题目,也是作为某年的成都赛区的比赛题目。也感谢Acrush的代码让我知道怎么做这题。首先讲题意:现在有一个序列,要求你求这个序列下标对5取模余3的所有数字的和(下标从1开始)。有三个操作add 向这个集合中添加一个数字,并且保证这个数字是没有重复出现过的;del从这个集合中删除掉一个数字,并且保证这个数字是在这个集合中存在的原创 2015-10-04 16:20:08 · 650 阅读 · 0 评论 -
Codeforces Beta Round #19D 线段树
题意:在一个二维平面内,现在有三个操作add x y 向这个平面内添加一个点并且保证这个点之前没有被加入remove x y 从这平面内删除这个点并且保证这个点时存在过的find x y 找到这个点的右上角离它最近的那个点思路:二维转一维,以x轴作为线段树的区间,线段树每个区间保存这个区间最大的y,根节点用set保存有多少个y,因为只有20W个数然而数据大小达到10^9,所原创 2015-10-06 12:29:45 · 397 阅读 · 0 评论 -
HDU 1394 线段树
线段树单点更新。题意:给你任意N个数字,然后算这个数字序列的逆序数,然后依次把第1个,第2个。。。第N个移动到后面得到一个数字序列,在这些序列里面找到逆序数最小的一个序列,打印出该序列的 逆序数。思路:利用线段树单点更新的思想,输入一个数就 判断在线段树里面是否有比他大的数,如果有,则计入ans。计算完原始序列后,下面要用上一个结论,就是接下来的序列的逆序数=上一个序列的逆序数-t原创 2015-09-17 21:30:49 · 338 阅读 · 0 评论 -
HDU 1754 线段树
线段树单点更新这道题需要注意的是输入,题目明确提示了要用scanf来输入加快速度,所以这里可能会有一个错误,在build里面是用scanf输入的。而输入文件可能是在输入N个数据后有一个换行符,如果不把换行符读出来可能会有错误。所以要用下面这句话scanf("%*c%c%d %d", &c, &a, &b);#include#include#includeusing namespace原创 2015-09-16 20:25:28 · 310 阅读 · 0 评论 -
HDU 1166 线段树
题意:给你N个数据,现在有无数个查询(每次不超过4W)。线段树的单点更新。#include#include#includeusing namespace std;#define Lchild rt<<1,L,m#define Rchild rt<<1|1,m+1,Rint T,N;int tree[50010*3];void push_up(int rt){ tree[原创 2015-09-15 22:17:53 · 322 阅读 · 0 评论 -
Codeforces Round#225 div.2E Propagating tree 线段树
题意:给你一颗树,现在有两个操作:1 x val:代表着对节点x进行加val,那么他的孩子节点-val,他的孙子节点+val,依次类推2 x:代表着你要打印这个节点的值。思路:线段树区间更新,单点查询。对于每一个节点,都会有一个对应的控制区间,我们首先DFS一把,找到每个点的控制区间,并且DFS的时候顺便把每一个节点处于什么层次顺便一起记下来。对于该题,我们建立两颗线段树,一颗原创 2015-11-28 16:01:23 · 385 阅读 · 0 评论