线段树/树状数组
A_loud_name
23333333~~~
展开
-
poj 2777 Count Color
题目大意 给一个固定长度为L的画板 有两个操作: C A B C:区间AB内涂上颜色C。 P A B:查询区间AB内颜色种类数。分析 和zoj1610差不多,不解释。 A B可以A>B 代码 type pnode=^tnode; tnode=record lc,rc:pnode; c:longint;e原创 2016-05-25 17:22:59 · 373 阅读 · 3 评论 -
开花 纪中 1435 线段树
Description 在遥远的火星上,上面的植物非常奇怪,都是长方形的,每个植物用三个数来描述:左边界L、右边界R以及高度H,如下图所示描述一个植物:L=2,R=5和H=4。 每天都有一个新植物长出来,第一天的植物高度为1,后面每天长出的植物比前一天的高1。 当一个新植物长出来的时候,跟其他植物的水平线段相交处会长出一朵小花(前提是之前没有长出花朵),如果线段交于端点,是不会原创 2016-07-14 16:00:57 · 536 阅读 · 3 评论 -
排序 纪中 1386 树状数组/玄学
Description 你收到一项对数组进行排序的任务,数组中是1到N个一个排列。你突然想出以下一种特别的排序方法,分为以下N个阶段: •阶段1,把数字1通过每次交换相邻两个数移到位置1; •阶段2,用同样的方法把N移到位置N; •阶段3,把数字2移到位置2处; •阶段4,把数字N-1移到位置N-1处; •依此类推。 换句话说,如果当前阶段为奇数,则把最小的未操转载 2016-07-12 22:00:04 · 465 阅读 · 3 评论 -
环中环 纪中1347 dp+线段树优化 玄学
Description 被认为天才的小头遇到麻烦了!!这天数学课老师给出了一道难题,而小头居然没能在3秒内解决,可见此题难度之大。 问题是这样的:n个整数围成一个环,老师要求选出其中的若干数,使得选中的数所组成的环中,两个相邻数的差的绝对值不等于1。在满足这个前提下,问最多能取多少个数。Input 第一行一个正整数n,表示有n个数 第二行n个整数,a1、a2……an 按顺时针方向围成原创 2016-08-16 16:47:37 · 637 阅读 · 0 评论 -
最大值[JSOI2008] 洛谷1198 线段树
题目描述现在请求你维护一个数列,要求提供以下两种操作:1、 查询操作。语法:Q L功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。限制:L不超过当前数列的长度。2、 插入操作。语法:A n功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾。限制:n是整数(可能为负数)并且在长整范围内。注意原创 2017-01-04 21:02:36 · 448 阅读 · 0 评论 -
【模板】线段树 洛谷 3372 线段树
题目描述如题,已知一个数列,你需要进行下面两种操作:1.将某区间每一个数加上x2.求出某区间每一个数的和分析简单的线段树+lazy标记 复习一下如何写lazy。code#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<string>#include<algorithm>using name原创 2017-01-13 19:08:07 · 649 阅读 · 0 评论 -
覆盖的面积 hdu1255 扫描线+线段树
题目大意给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积.分析介绍扫描线 只要在统计的时候看看是否被覆盖两次就可以了code#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<string>#include<algorithm>using namespace std;struct原创 2017-02-28 17:04:01 · 416 阅读 · 0 评论 -
Atlantis poj 1151 线段树+扫描线
DescriptionThere are several ancient Greek texts that contain descriptions of the fabled island Atlantis. Some of these texts even include maps of parts of the island. But unfortunately, these maps des原创 2017-02-26 21:47:26 · 356 阅读 · 0 评论 -
序列 ssl 2650 线段树+并查集
题目大意有一个n个数的序列A,请写一个程序完成下列操作: 1 l r表示查询l到r的和 2 l r表示把每个a[x] (l<=x<=r)变为sqrt(x) n<=100000,m<=100000分析显然开根号是不能区间维护的,但发现一个int最多开五次根号就会变为1,所以我们可以用并查集来维护每个数的下一个可以开根号的数是哪一个,那么就可以均摊O(1)来暴力修改了。 区间操作用线段树原创 2017-04-14 21:47:39 · 407 阅读 · 0 评论 -
GDKOI2016 魔卡少女
题目给出N个数,M个操作。操作有修改和询问两种,每次修改将一个数改成另一个数,每次询问一个区间的所有连续子区间的异或和。n,m<=100000,ai<=1000分析当时我可是直接暴力30分的。。。然后正解也很暴力。 位运算,考虑一位位的来做。 那么目标变成了每一位统计1的个数。 对于一个区间,维护:d:这段区间的异或和L[0],L[1]:子区间一定从左端...原创 2018-03-08 21:51:21 · 478 阅读 · 0 评论 -
Dynamic Rankings 洛谷2617 bzoj 1901
题目给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]……a[j]中第k小的数是多少(1≤k≤j-i+1),并且,你可以改变一些a[i]的值,改变后,程序还能针对改变后的a继续回答上面的问题。你需要编一个这样的程序,从输入文件中读入序列a,然后读入一系列的指令,包括询问指令和修改指令。对于每...原创 2018-03-15 20:28:23 · 287 阅读 · 0 评论 -
poj 3321 Apple Tree 线段树
题目大意 一个有n个节点的树,树的每个节点可能有一个苹果或没有,有两种操作: C x 将节点x的权值改变,即如果有一个苹果删掉,否则增加一个苹果。 Q x 询问以节点x为根的子树中有多少个苹果。 数据范围:1 分析 对于棵树进行dfs遍历,并记录每一个点的dfs序号(st[i]),在一个节点的所有儿子都被遍历过后,记录当前en[i]为当前最大dfs序号的节点原创 2016-05-22 20:24:28 · 483 阅读 · 2 评论 -
poj 3368 Frequent values 线段树
题目大意给一个长度为n的不降序列a1,a2,a3,…,an,有q个询问,每个询问为:i j询问在子序列ai…aj中出现最多的元素。数据范围:1 分析 注意到题目描述中的“不降序列”,让我们联想到可以使用线段树这一数据结构。 对于线段树的每一个节点: 记录left[k]表示当前区间最左边连续的元素有多少个 记录right[k]表示当前区间最右边连续的元素原创 2016-05-22 11:23:20 · 397 阅读 · 3 评论 -
线段树 例一
题目大意 桌子上零散地放着若干个盒子,桌子的后方是一堵墙。如右图所示。现在从桌子的前射来一束平行光, 把盒子的影子投射到了墙上。问影子的总宽度是多少? 分析 1.就是x轴上有若干条线段,求线段覆盖的总长度。 2.给线段树每个节点增加一个域cover。cover=1表示该结点所对应的区间被完全覆盖,cover=0表示该结点所对应的区间未被完全覆盖。最后统计被完全覆盖的节点的原创 2016-05-14 07:53:32 · 385 阅读 · 3 评论 -
线段树 例二
题目大意 桌子上零散地放着若干个不同颜色的盒子,桌子的后方是一堵墙。如右图所示。问从桌子前方可以看到多少个盒子?假设人站得足够远。 分析 可以这样来看这道题:x轴上有若干条不同线段,将它们依次染上不同的颜色,问最后能看到多少种不同的颜色?(后染的颜色会覆盖原先的颜色)我们可以这样规定:x轴初始是颜色0,第一条线段染颜色1,第二条线段染颜色2,以此类推。原先构造线段树的方法不再适原创 2016-05-14 08:54:57 · 400 阅读 · 3 评论 -
线段树 例三
题目大意 把例2稍加改动,规定:线段的颜色可以相同。连续的相同颜色被视作一段。问x轴被分成多少段。 分析 仍然定义cover如下:cover=-1表示该区间由多种颜色组成。cover>=0表示该区间只有一种单一的颜色cover。 但是,统计算法就要做一下大的改动: 递归定义改一改:function find(t:pnode;l,r:longint;var lo,ro原创 2016-05-14 11:27:46 · 362 阅读 · 3 评论 -
poj 2182 Lost Cows
题目大意 N头牛从1到N编号(2 分析 一眼可以看出如果第n头牛前有x头比他小,那他的编号就是x+1。以此类推… 线段树:ad记录该区间目前还剩ad个空位,每一次插入的时候,如果该节点左儿子ad>=pos,那么只要在左儿子找就可以了否则要在右儿子中找,此时pos改为pos-左儿子ad。 代码type pnode=^tnode; tnode=record原创 2016-05-29 10:21:12 · 437 阅读 · 5 评论 -
poj 2828
分析 见poj 2182:http://blog.csdn.net/a_loud_name/article/details/51530711代码type pnode=^tnode; tnode=record lc,rc:pnode; c:longint;end;var t:pnode; i,j,k:longint; x,y:longi原创 2016-05-29 10:23:40 · 426 阅读 · 3 评论 -
线段树 例四
题目大意 x轴上有若干条不同线段,问某个单位区间[x,y]上重叠了多少条线段? 分析 加一个域count,当线段完全覆盖区间[a,b]时,把[a,b]的count域加一。 思考线段树的构造方法:当某线段能够完整覆盖某个结点所对应的区间时,则不再二分。因此要统计某个单位区间上重叠的线段总数,必须把从叶结点到根结点路径上所有结点的count域累加。 所以统计算法时,要用原创 2016-05-17 16:55:48 · 502 阅读 · 3 评论 -
zju1610 count the colors 线段树
题目大意 给n个线段,覆盖在一条直线上,每个线段都覆盖先前的线段(如果相重叠的话),每条线短都有自己的颜色,求最后有多少种颜色和每种颜色要多少段。 分析 就是例二和例三的结合。 首先定义cover如下:cover=-1表示该区间由多种颜色组成。cover>=0表示该区间只有一种单一的颜色cover。 然后,统计算法就要做一下大的改动: 递归定义改一改:func原创 2016-05-18 17:00:29 · 755 阅读 · 3 评论 -
poj 3378 Crazy Thairs
题目大意 给一个长度为n的序列ai,定义五元组(i,j,k,l,m)满足: 1 ai 问序列中有多少个满足条件的五元组。 数据范围:1 分析 算法分析ª 首先可以想到一个简单的dp方程 设f[i][j]表示从前i个数中选择j个数且第j个数为a[i]的种数,则 f[i][j] = f[i’][j - 1], 0 直接作原创 2016-05-31 17:39:46 · 454 阅读 · 3 评论 -
线段树 例五
题目大意 一行N个方格,开始每个格子里的数都是0。现在动态地提出一些问题和修改:提问的形式是求某一个特定的子区间[a,b]中所有元素的和;修改的规则是指定某一个格子x,加上或者减去一个特定的值A。现在要求你能对每个提问作出正确的回答。 分析 方法一:线段树 为线段树每个节点增加一个Count域。表示所对应区间内元素之和。每次修改一个格子,需要修改从叶结点到根结点路径上所有原创 2016-05-18 17:37:27 · 473 阅读 · 3 评论 -
线段树 例六 未解决
题目大意 在一个N*N的方格中,开始每个格子里的数都是0。现在动态地提出一些问题和修改:提问的形式是求某一个特定的子矩阵(x1,y1)-(x2,y2)中所有元素的和;修改的规则是指定某一个格子(x,y),在(x,y)中的格子元素上加上或者减去一个特定的值A。现在要求你能对每个提问作出正确的回答。1≤N≤1024,提问和修改的总数可能达到60000条。 分析 我有一个超时的算原创 2016-05-19 18:03:24 · 372 阅读 · 3 评论 -
【GDKOI2015】看门狗
题目分析dp走起:f[i][j] = max{ f[i-1][k] + vx[i] + vy[j] | k < j and (i, j) ∈ E, f[i-1][j], f[i][j-1], f[i-1][j-1]}可以用线段树优化原创 2018-03-20 21:51:30 · 264 阅读 · 0 评论