![](https://img-blog.csdnimg.cn/20190927151132530.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法-线段树
线段树
键盘上的艺术家w
努力奋斗
展开
-
hdu1823二维线段树,单点跟新,区间求最大值。
/*思路:以身高为x,活泼度为y建立二维线段树,然后其余就是二维线段树的区间最值和单点跟新.然后有 升高和活泼度相同,但是缘分不同的数据。还有输入查询数据的时候 有可能 区间大的输入在区间小的的前面*/#include#include#include#include using namespace std;int m;int sum[102*4+10][1002*4+10];原创 2017-08-16 10:57:49 · 463 阅读 · 0 评论 -
hdu4819 正宗二维线段树 区间求最值,单点跟新
题意:给你一个矩阵,随后m行,x,y,l,从x行y列,扩大l/2个格子,不能出界,表示要查询的矩阵大小,查询最小值与最大值,然后将他们的和除2输出来,然后将他们的和除2更新给 x,y。思路:就是构造二维线段树,然后就是单点跟新,区间最值了。/*题意:给你一个矩阵,随后m行,x,y,l,从x行y列,扩大l/2个格子,不能出界,表示要查询的矩阵大小,查询最小值与最大值,然后原创 2017-08-20 16:54:30 · 543 阅读 · 0 评论 -
poj2155 二维线段树 区间修改
/*题目操作就是说,每次操作可以是编辑某个矩形区域,这个区域的0改为1,1改为0,每次查询只查询某一个点的值是0还是1.我们可以在修改时标记某一个节点,那么这个节点以下的区间就都是要修改的,当我们在查找的时候,只需要统计查找到这个点时,一路上有多少个被修改的区间,是偶数说明呗修改回来了,是奇数那就是被修改了。*/#include#include#includeint n,m;b原创 2017-08-20 17:02:59 · 859 阅读 · 0 评论 -
hdu3308 线段树 区间合并,单点跟新
题意:求连续上升子序列的长度。输入 n和m表示 序列的长度为(0--n-1); 然后输入 Q表示 查询(x,y)最长连续子序列的个数,输入U(表示将第x个数改成y); 思路:线段树的区间合并 lsum表示最左边的最长子序列的个数,rsum,表示区间最右边 最长子序列的个数,msum表示整个区间最长连续子序列的个数。 其余的照常区间合并#include#include#i原创 2017-08-20 22:18:28 · 272 阅读 · 0 评论 -
UESTC - 1597 线段树~~~区间更新 区间求和
/*思路:这个题目主要是用两个延迟标记的数组,一个加一个乘来处理。但是我们的问题是,当两个延迟标记到了 一个区间的时候我们是先加还是乘呢。如果弄清楚这个原理,这个题目,就出来了。大家看下这个啥 忘记叫啥了(sum[rt]+3)*2 ==sum*2+3*2,我们假设+3就是线段树加的延迟标记。乘2就是线段树的乘的延迟标记。我们遇到乘,就直接也同样的更新加的延迟标记,因为加如果没有的话,乘原创 2017-08-13 21:46:16 · 279 阅读 · 0 评论 -
hdu1394 Minimum Inversion Number 线段树&&暴力
/*求逆序数 输入n 后面是n 个数 为(0-——n-1);n=5;举个例子 1 4 3 2 0 sum=0; 1后面有多少个比他小的 1个(1,0),4后面有多少 3个(4,3)(4,2)(4,0)3后面比他小的有多少2(3,2)(3,0),2后面有1(2,0) 0后面没有。逆序数sum=1+3+2+1=7也可以这样算 1前面比他大的有多少个 0个,4前面比他大的0,3前面比他大的原创 2017-08-14 17:28:10 · 208 阅读 · 0 评论 -
hdu2795 线段树~~~单点更新,区间最值。
题意: 给你 一块h*w的板子,叫你贴广告。这些广告的大小 全都是 1*wi,贴广告的要求是,尽量贴的上,在同一个高度尽量往左边贴。输入 是 h w n张海报,接着的n行是n张海报的 wi;思路:当h每张的高度只有1,假如h>n我们贴报纸只需要 n个高度,就不必要那么高了。然后就是普通的线段树 查询 ,维护区间最值了。当区间(1-h)的最大值小于输入的海报的时候就直接输出-原创 2017-08-14 21:17:10 · 228 阅读 · 0 评论 -
hdu1698 线段树区间跟新,区间求和
/*一个人有种武器:成一个线段。一开始 线段上每个点的攻击力都是1,然后可以按区间将攻击力置为(1,2,3)任意一个数。思路:就是线段树的区间跟新。区间求和。有不太懂线段树的童鞋~~~可以看看这里,这里总结的比较详细。http://blog.csdn.net/lw277232240/article/details/77092634*/#include#include#include原创 2017-08-14 21:49:18 · 214 阅读 · 0 评论 -
一维线段树总结~~~
这几天搞了下线段树,今晚来做个总结吧~~~~线段树是一种数据结构,是一颗平衡二叉树。他的时间复杂度是O(logN)log级别是非常的快的。那么线段树是如何构成的呢?那肯定是线段啦!~~~他的根节点是(1,n)接下来两个儿子节点是(1,(n+1)/2) ((n+1)/2+1,n);然后一次类推下去,到达叶子节点则为(1,1)(2,2)......。根据满二叉树的性质,我们加入根节原创 2017-08-22 10:07:14 · 350 阅读 · 0 评论 -
poj1195二维线段树,区间求和,单点跟新
昨天搞了下二维线段树,今天来练练手~~感觉不错。二维线段树~我这里用的是树中有树的方法,建的二维线段树。也就是x坐标一棵树。然后每个对应x坐标的区间,又有一颗树为y坐标。理解了 也就跟一维线段树 差不多。#include#include#include#define ll long long#define maxn 1025#define inf 0x3f3f3f3fll原创 2017-08-16 09:27:55 · 543 阅读 · 0 评论 -
poj 3667 线段树 区间合并
题意:一个旅馆有 两种操作 一种操作 输入 1 3,表示查询有没有连续3间空房,三间空房要尽量靠左边,如果有就住进去,并且输出最左边的那间旅馆编号,2 2 5 表示将(2,2+5-1)的房间腾空。输入:n个旅馆,m种操作。一开始旅馆为空。思路:线段树的区间合并 维护三个值,msum 此区间最大连续空房间的个数,lsum 此区间内 从左边起连续空房间的个数,rsum 此区原创 2017-08-20 16:48:42 · 370 阅读 · 0 评论 -
hdu3911 线段树~~区间合并(超详细讲解)
题意:输入n 后面n个数,代表着1-n区间为哪些数。接着输入m表示有m个操作。这个题~~一个错误找了我好久~~~就是#define MAX 10*10*10*10*10+2 我去拿MAX*4 一直re 找了好久~~~然后 输入 op 【a,b】op==1则表示 将【a,b】区间里的值取反,如果是0则表示查询(a,b)区间最大连续为1的个数。思路: 刚学了下线段树的合并就拿原创 2017-08-20 11:57:27 · 1854 阅读 · 0 评论 -
线段树~~~~ hdu1166
第一个线段树~~就这样愉快的完成了~1 a,还是比较开心。昨天到今天看了个线段树的构造,已经区间查询,单点更新。今天来练练手~~~这个题就是个裸的线段树~~不难!!!!!!!!!!!要是对线段树不是很理解的同学 可以先看下这里 http://blog.csdn.net/lw277232240/article/details/77092634里面有非常详细的线原创 2017-08-11 10:50:01 · 180 阅读 · 0 评论 -
hdu1754
/*此题就是线段树的 单点跟新,区间最大值。有不懂线段树的同学可以先看看这里http://blog.csdn.net/lw277232240/article/details/77092634*/#include #include#includeusing namespace std;#define maxind 200000int segTree[maxind * 4 + 1原创 2017-08-11 11:33:21 · 264 阅读 · 0 评论 -
poj3468 线段树区间跟新,区间求和
/*线段树的区间跟新和区间求和。这里线段树的时间复杂度是O(logn)log级别的时间复杂度是很好的咯。则这里就是q*logn如果遍历的话则是 复杂度是 q*n这里用到延迟标记给大家推荐一篇很好的理解线段树的文章。http://blog.csdn.net/lw277232240/article/details/77092634那里面讲的很详细。*/#include#includ原创 2017-08-11 16:49:39 · 233 阅读 · 0 评论 -
南阳oj 116 士兵杀敌二 线段树
/*此题是线段树的区间求和查询,已经线段树的单点跟新。线段树不是很懂的同学可以看这个里面有非常详细的讲解。怎么建立线段树,怎么做线段树,相信大家看了一定可以做出这个题加油~~~~~~http://blog.csdn.net/lw277232240/article/details/77092634*/#include#include#includeusing namespace原创 2017-08-11 19:41:38 · 257 阅读 · 0 评论 -
csu1110
/*题意:给你一些数据,要你求区间最小值,(query(3,7)),然后 shift(2,4,5,7) 是将数据 2的位置的值放到数据数据7号位置,7号位->5号位,5->4,4->2循环移动一个圈。思路:构造一颗线段树,这里线段树的功能就是 区间求最值,单点跟新。http://blog.csdn.net/lw277232240/article/details/77092634这个网址是原创 2017-08-12 20:55:35 · 262 阅读 · 0 评论 -
超级牛逼的线段树总结 啊哈哈~~~
线段树一:线段树基本概念1:概述线段树,类似区间树,是一个完全二叉树,它在各个节点保存一条线段(数组中的一段子数组),主要用于高效解决连续区间的动态查询问题,由于二叉结构的特性,它基本能保持每个操作的复杂度为O(lgN)!性质:父亲的区间是[a,b],(c=(a+b)/2)左儿子的区间是[a,c],右儿子的区间是[c+1,b],线段树需要的空间为数组大小的四倍转载 2017-08-11 10:48:31 · 1066 阅读 · 0 评论 -
南阳 oj119 线段树 区间最值
/* 思路:线段树的区间查询,区间最值。 但是~~~~ 这时间 唉~~~~~~~~~~~~~ 第二份代码 是过不了的。习惯了那样子写代码。 */#include#include#include#define MAX 100000*4+10int n,m;int min1[MAX];int max1[MAX];int min2,max2;int min(int x原创 2017-08-12 21:41:47 · 339 阅读 · 0 评论 -
hdu 3397 线段树~~综合题(区间合并,求和,跟新,查询)
题意:输入 t组数据 n个数 m 次操作。 0 1 3 将区间1--3置0 1 1 3 ~~置1 2 1 3 ~~取反0变1,1边0 3 1 3 ~~ 区间有多少个1 4 1 3 ~~区间最多有多少个连续的1思路:这个题比较综合,有个区间求和,区间合并,区间查询。区间更新当时晚上做的当晚没有改出来,改到12点多。一个原创 2017-08-24 12:30:15 · 373 阅读 · 1 评论