
数据结构---线段树
forezxl
水君一枚
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
线段树简介
用处很多啊,主要是维护某一区间的值,比如最大值,区间和什么的。支持修改和查询操作。原创 2017-08-14 21:10:32 · 393 阅读 · 0 评论 -
BZOJ4592 [Shoi2015]脑洞治疗仪(洛谷P4344)
BZOJ4592: [Shoi2015]脑洞治疗仪(洛谷P4344)线段树BZOJ题目传送门 洛谷题目传送门昨天一个字母打错一晚上没调出来。。。挺裸的线段树。0直接做。1记录下l0l0l_0到r0r0r_0的1的个数后可以二分确定修补的右端点,也可以直接往下做到没有为止,前者log2log2\log^2,后者比loglog\log稍微大一点。2对每个节点记一下最左边、最右...原创 2018-08-22 19:59:53 · 278 阅读 · 0 评论 -
洛谷P3960 列队(NOIp2017)
线段树动态开点题目传送门去年不会动态开点啊。。。 建n+1棵树,前n棵维护当前这行(除了最后一列),第n+1棵维护最后一列。每次操作的时候分操作的列是不是最后一列讨论一下就好了。 细节有点多,调了好久最后还是借鉴了一下题解。代码:#include<cctype>#include<cstdio>#include<cstring>#incl...原创 2018-09-10 20:58:34 · 363 阅读 · 0 评论 -
HDU5634 Rikka with Phi
线段树题目传送门题目大意: 三个操作:区间取φ\varphiφ,区间覆盖,区间求和。首先一个数取φ\varphiφ经过log次就会变成111(奇数至少-1,偶数至少/2)。那么这个操作和区间开根号一样暴搞就好了。注意暴搞的时候如果有区间覆盖的标记直接对标记取φ\varphiφ。代码:#include<cctype>#include<cstdio>#inclu...原创 2018-09-26 20:30:49 · 323 阅读 · 0 评论 -
codeforces 558E. A Simple Task
codeforces 558E. A Simple Task线段树题目传送门**题目大意:**给你一个字符串,每次对一个区间进行降序或升序排序,求最后的字符串。开26棵线段树,每一棵维护一个字母的位置,直接模拟就好了。O(26qlogn)O(26q\log n)O(26qlogn)稳得很。还有一种做法是基于这道题的。每做一次就可以知道其他位置的相对大小关系,这样做26次就全都知道了。复...原创 2018-09-26 21:41:24 · 284 阅读 · 0 评论 -
BZOJ1568: [JSOI2008]Blue Mary开公司(洛谷P4254)
线段树BZOJ题目传送门洛谷题目传送门这是一个叫李超线段树的东西。这道题可以抽象成一个平面直角坐标系,有两种操作:加入一条直线或询问当x=tx=tx=t时所有直线的最大值(ttt为整数)。对于每个区间记录一条直线kxk_xkx和bxb_xbx,在这个区间中这条直线取到的长度最长。当插入一条直线时,对于一个区间分三种情况讨论:1.没有最长直线或当前直线完全覆盖最长直线。此时直接把当...原创 2018-10-11 18:23:27 · 216 阅读 · 0 评论 -
BZOJ4821: [Sdoi2017]相关分析(洛谷P3707)
线段树BZOJ题目传送门洛谷题目传送门这道题最大的难点在于会爆long long和卡精度我会因式分解!首先因为要计算xˉ\bar xxˉ和yˉ\bar yyˉ,肯定要记∑x\sum x∑x和∑y\sum y∑y。把求aaa的公式展开来,发现上面有∑xiyi\sum x_iy_i∑xiyi,下面有∑xi2\sum x_i^2∑xi2,都把它们记下来。对于2,3操作,∑xi\sum...原创 2018-10-04 22:06:12 · 235 阅读 · 0 评论 -
HDU5957 Query on a graph
线段树 BFS序题目传送门**题目大意:**一个基环树,有点权。有询问和修改操作。修改有三个参数u,k,du,k,du,k,d,表示把距离uuu不超过kkk(包括自己,下同)的点都加上ddd。查询有两个参数u,ku,ku,k,表示求距离uuu不超过kkk的点权和。n≤1e5,k≤2n\leq 1e5,k\leq 2n≤1e5,k≤2。先别管那条非树边。当k=1k=1k=1的时候是维护它爸爸和...原创 2018-10-06 21:22:43 · 284 阅读 · 0 评论 -
BZOJ3685: 普通van Emde Boas树
线段树题目传送门set卡了老半天都没卡过去,只好老实写线段树了。8.6s卡过。代码:#include<cctype>#include<cstdio>#include<cstring>#include<algorithm>#define N 1000005#define F inlineusing namespace std;st...原创 2018-10-09 20:48:20 · 219 阅读 · 0 评论 -
BZOJ2212: [Poi2011]Tree Rotations(洛谷P3521)
线段树合并BZOJ题目传送门洛谷题目传送门学了发线段树合并。对于一棵子树,无论它是否交换,都不会影响到这棵子树外的其它节点。那么我们只要每一次取小的那个就好了。对每个节点开一棵权值线段树,每次把左右儿子合并上来。而左右儿子有两个贡献,分别为一个儿子左区间的数个数*另一个儿子右区间的数个数,对这两个取min即可。代码:#include<cctype>#include<...原创 2018-10-25 11:29:10 · 163 阅读 · 0 评论 -
BZOJ1135: [POI2009]Lyz(洛谷P3488)
Hall定理 线段树BZOJ题目传送门洛谷题目传送门Hall定理:一张二分图有完美匹配的充要条件为对于左边点集任意一个子集(大小为∣S∣|S|∣S∣),都存在至少∣S∣|S|∣S∣个右边的点有边相连。对于这道题,我们只需要判断连续一段区间内的人是否满足即可。即∀ l,r ∑i=lrai≤(r−l+1+d)∗k\forall\ l,r\ \sum_{i=l}^ra_i\l...原创 2018-10-24 21:10:19 · 231 阅读 · 0 评论 -
BZOJ3747: [POI2015]Kinoman(洛谷P3582)
线段树BZOJ题目传送门洛谷题目传送门设nxt[i]nxt[i]nxt[i]为与f[i]f[i]f[i]相同的下一个位置。枚举左端点,用线段树维护最大值。假设当前推到lll,那么把[l,nxt[l−1]][l,nxt[l-1]][l,nxt[l−1]]的贡献减去,把[nxt[l],nxt[nxt[l]]−1][nxt[l],nxt[nxt[l]]-1][nxt[l],nxt[nxt[l]]−...原创 2018-10-27 09:31:59 · 229 阅读 · 0 评论 -
BZOJ5334: [Tjoi2018]数学计算(洛谷P4588)
线段树BZOJ题目传送门洛谷题目传送门线段树维护每次操作的数,撤销就把那个位置变成1就好了。代码:#include<cctype>#include<cstdio>#include<cstring>#include<algorithm>#define N 100005#define F inlineusing namespace ...原创 2018-11-02 10:41:21 · 259 阅读 · 0 评论 -
BZOJ3211 花神游历各国(洛谷P4145、BZOJ3038)
线段树BZOJ3211 BZOJ3038 洛谷P4145我们发现1012101210^{12}开不了几次根号就变成1了。那么我们每次暴力修改,当这整个区间的数都≤1≤1\leq1时给它打个标记,下次遇到就不用改了。查询的话直接查就好了。代码:#include<cmath>#include<cctype>#include<cstdio>#...原创 2018-07-07 09:33:18 · 270 阅读 · 0 评论 -
BZOJ3212 Pku3468 A Simple Problem with Integers
线段树题目传送门全裸线段树代码:#include<cctype>#include<cstdio>#include<cstring>#include<algorithm>#define N 100005#define F inlineusing namespace std;typedef long long LL;s...原创 2018-07-02 21:49:08 · 209 阅读 · 0 评论 -
洛谷P2023 [AHOI2009]维护序列 (BZOJ1798)
线段树原创 2017-11-09 13:51:20 · 718 阅读 · 0 评论 -
hihocoder1078 线段树的区间修改
线段树原创 2017-06-03 08:25:59 · 414 阅读 · 0 评论 -
hihocoder1077 RMQ问题再临-线段树
线段树描述上回说到:小Hi给小Ho出了这样一道问题:假设整个货架上从左到右摆放了N种商品,并且依次标号为1到N,每次小Hi都给出一段区间[L, R],小Ho要做的是选出标号在这个区间内的所有商品重量最轻的一种,并且告诉小Hi这个商品的重量。但是在这个过程中,可能会因为其他人的各种行为,对某些位置上的商品的重量产生改变(如更换了其他种类的商品)。 小Ho提出了两种非常简单的方法,但是都不能完美的解决原创 2017-05-31 07:53:15 · 510 阅读 · 2 评论 -
BZOJ2957: 楼房重建
线段树题目传送门当修改某一个建筑的高度时,只会对后面的答案产生影响。 线段树建好后,对于一个节点有两种情况: 1.这个节点中最大的斜率≤修改的斜率(斜率相等的时候也算看不见)。这时这个节点对答案的贡献没有贡献。 2.否则如果其左子树的最大斜率>修改的斜率,因为不会影响到右子树,直接递归处理左子树,否则就变成第一种情况。代码:#include#in原创 2018-01-14 19:50:05 · 300 阅读 · 0 评论 -
BZOJ1012: [JSOI2008]最大数maxnumber(洛谷P1198)
线段树BZOJ题目传送门 洛谷题目传送门这道题做法很多,这里采用线段树。 先建一颗200000大小的线段树。插入时就相当于单点修改,查询时直接查就好了。代码(洛谷加了读优最后一个点会T掉我也不知道为什么):#include#include#include#include#define N 200006using namespace std;struct tree{原创 2018-01-27 21:10:35 · 393 阅读 · 0 评论 -
BZOJ1067 [SCOI2007]降雨量(洛谷P2471)
线段树 离散化BZOJ题目传送门 洛谷题目传送门一道细节题。先根据数据范围先离散一下。 然后分四种情况讨论(区间内的x和y都是离散后的结果): 1.x,y都已知。 此时如果不满足一下任意一个条件则为false: x的值≤y的值,[y+1,x−1][y+1,x−1][y+1,x-1]内的最大值&lt;&lt;[y,x][y,x][y,x]内年份连续为true,否则为maybe...原创 2018-02-09 15:07:44 · 348 阅读 · 0 评论 -
BZOJ4817 [Sdoi2017]树点涂色(洛谷P3703)
LCT 线段树BZOJ题目传送门 洛谷题目传送门码力不行啊操作1就是access啦 操作2就是w[x]+w[y]−2∗w[lca(x,y)]+1w[x]+w[y]−2∗w[lca(x,y)]+1w[x]+w[y]-2*w[lca(x,y)]+1啦 操作3就是先DFS序然后线段树查一查区间最大值啦每个节点到根的颜色数为虚边数+1。(access后虚边即代表和上一个点的颜色不一样...原创 2018-03-07 21:13:34 · 383 阅读 · 0 评论 -
BZOJ1858: [Scoi2010]序列操作(洛谷P2572)
线段树BZOJ题目传送门 洛谷题目传送门就是这道题的两种颜色版+普通线段树。对于每个区间维护一些东西: sm[0/1]sm[0/1]sm[0/1]表示这个区间0/10/10/1的数量,mx[0/1]mx[0/1]mx[0/1]表示这个区间连续的0/10/10/1的最长长度,lx[0/1]lx[0/1]lx[0/1]表示以这个区间左端点为起始的连续0/10/10/1的长度,rx[0/...原创 2018-03-25 19:39:13 · 279 阅读 · 0 评论 -
BZOJ4552 [Tjoi2016&Heoi2016]排序(洛谷P2824)
线段树 二分BZOJ题目传送门 洛谷题目传送门一道有思维难度的线段树所以我就去看题解了先二分答案。设答案为x,那么把原序列转化一下,<x<x≥x≥x\geq x的为1。线段树维护区间内1的个数。那么排序的时候直接区间修改就行了,最后判断a[q]a[q]a[q]是不是1就好了。代码:#include<cctype>#include<cstdio&...原创 2018-04-19 15:33:08 · 278 阅读 · 0 评论 -
BZOJ5132: [CodePlus2017年12月]火锅盛宴(洛谷P4032)
堆 线段树BZOJ题目传送门 洛谷题目传送门这道题有蛮多种做法的,但大体是堆+线段树/树状数组我们把生的和熟的分开维护。生的用一个堆维护时间,每次读入时间后把熟了的转移到线段树上去,线段树维护区间和。对于操作2,我的做法是另开n个队列维护每种食物被放入的先后顺序,当然树状数组+二分更快。然后就差不多了,具体实现见代码:#include<queue>#incl...原创 2018-05-08 20:36:43 · 193 阅读 · 0 评论 -
洛谷P3870 [TJOI2009]开关(洛谷P2846)(BZOJ1230)
线段树洛谷P3870 洛谷P2846 BZOJ1230线段树不解释。代码:#include<cctype>#include<cstdio>#include<cstring>#include<algorithm>#define N 100005#define F inlineusing namespace std;...原创 2018-04-21 10:34:33 · 399 阅读 · 0 评论 -
BZOJ5011 [Jx2017]颜色(洛谷P4065)
线段树BZOJ题目传送门 洛谷题目传送门对每个颜色记录mx[i]mx[i]mx[i]和mn[i]mn[i]mn[i]表示iii在序列中的最大/最小位置。枚举区间右端点iii,设jjj为满足max[c[j]]>imax[c[j]]>imax[c[j]]>i的最接近jjj的位置。可以发现[ 1,max[c[j]] ][ 1,max[c[j]]&nbs...原创 2018-05-27 17:56:33 · 301 阅读 · 0 评论 -
BZOJ4059: [Cerc2012]Non-boring sequences
线段树题目传送门这道题正解是启发式分治,不过线段树也能做。和这道题很像,同样记一个nxt[i]nxt[i]nxt[i]表示a[i]a[i]a[i]下一次出现的位置,枚举左端点,撤销[i,nxt[i]−1][i,nxt[i]-1][i,nxt[i]−1],加上[nxt[i],nxt[nxt[i]]−1][nxt[i],nxt[nxt[i]]-1][nxt[i],nxt[nxt[i]]−1],并...原创 2018-11-07 18:52:19 · 368 阅读 · 0 评论