
线段树
小蒟蒻yyb
Studnet
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【洛谷1607】【USACO09FEB】庙会班车
题面题目描述逛逛集市,兑兑奖品,看看节目对农夫约翰来说不算什么,可是他的奶牛们非常缺乏锻炼——如果要逛完一整天的集市,他们一定会筋疲力尽的。所以为了让奶牛们也能愉快地逛集市,约翰准备让奶牛们在集市上以车代步。但是,约翰木有钱,他租来的班车只能在集市上沿直线跑一次,而且只能停靠N(1 ≤N≤20000)个地点(所有地点都以1到N之间的一个数字来表示)。现在奶牛们分成K(1≤K≤50000)个小组,第i原创 2017-07-10 20:38:11 · 617 阅读 · 0 评论 -
【BZOJ4653】【NOI2016】区间(线段树)
题面BZOJ题解NOINOI良心送分题?? 既然是最大长度减去最小长度 莫名想到那道反复减边求最小生成树 从而求出最小的比值所以这题的套路是一样的按照长度排序之后 依次加入 如果当前有被覆盖了超过mm次的点 就从前面开始,依次把线段拿走 每次更新一下答案就好啦#include<iostream>#include<cstdio>#include<cstdlib>#include<c原创 2018-01-17 21:11:49 · 239 阅读 · 0 评论 -
【POJ1151】Atlantis(线段树,扫描线)
题面Vjudge题解学一学扫描线 其实很简单啦 这道题目要求的就是若干矩形的面积和把扫描线平行于某个轴扫过去(我选的平行yy轴扫) 这样只需要求出每次和xx轴覆盖的长度 就可以两两相乘,求出面积 最后累计和就行啦#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#i原创 2018-02-06 22:11:37 · 232 阅读 · 0 评论 -
【BZOJ3211】花神游历各国(线段树)
题面BZOJ题解线段树傻逼题 对于开根操作 直接暴力进行 维护一个区间最大值,如果区间最大值<=1<=1就不用再算了#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>#include<set>#include<map>#inc原创 2018-02-23 11:51:09 · 260 阅读 · 0 评论 -
【BZOJ4552】排序(线段树,二分答案)
题面BZOJ题解好神的题啊 直接排序我们做不到 怎么维护? 考虑一下,如果我们随便假设一个答案 怎么检验它是否成立? 把这个数设成11,其他的数字都设成00 最后检查一下这个位置是不是11就好啦但是这样没法排序 那么,我们考虑二分一个答案, 把所有比midmid大的数都设成11 这样,如果在第QQ位上的数字是11 意味着有一个不小于当前midmid的数在这个位置上 否则就是一个原创 2018-02-25 11:34:02 · 313 阅读 · 0 评论 -
【BZOJ2957】楼房重建(线段树)
题面BZOJ题解对于整个区间维护最大斜率以及只考虑这个区间的答案考虑如何向上合并。首先左半段的答案是一定存在的所以,现在的问题就是右半段能够贡献的答案如果右半段的最大斜率小于左半段的最大斜率,则不存在贡献否则,如果右半段分为右左和右右两段如果右左的最大值大于了左半段的斜率,直接加上右右段的贡献然后递归除了右左段否则,直接递归处理右右段直接说有点说...原创 2018-03-13 15:13:15 · 191 阅读 · 0 评论 -
【UOJ228】基础数据结构练习题(线段树)
题面UOJ题解我们来看看怎么开根?如果区间所有值都相等怎么办?显然可以直接开根如果max−sqrt(max)=min−sqrt(min)max-sqrt(max)=min-sqrt(min)怎么办?此时意味着虽然开根出来的值不同,但是减去的值相同举个例子,比如8,98,9开根后是2,32,3虽然值不同,但是差相同所以,我们把开根换成区间减法当出现上述两种情况时下放减法标记即可#include<ios原创 2018-03-13 15:16:21 · 700 阅读 · 0 评论 -
【BZOJ1558】等差数列(线段树)
题面BZOJ题解可以说这道题已经非常毒瘤了怎么考虑询问操作?如果直接将一段数分解为等差数列?太麻烦了。。。。考虑相邻的数做差,这样等差数列变为了一段连续的相等区间考虑怎么维护分解一段区间为最少数量的等差数列事实上,等差数列的第一项不一定要和后面的相等,所以合并的时候要额外考虑所以,设s[0/1/2/3]s[0/1/2/3]分别表示左右端点是否计算入内同时维护最左端和最右端的值l,rl,r如果没有计算原创 2018-03-13 15:18:44 · 799 阅读 · 0 评论 -
【BZOJ2962】序列操作(线段树)
题面BZOJ题解设s[i]s[i]表示区间内选择ii个数的乘积的和考虑如何向上合并?s[k]=∑ki=0lson.s[i]∗rson.s[k−i]s[k]=\sum_{i=0}^klson.s[i]*rson.s[k-i]相当于是一个卷积形式区间取相反数是一个很好处理的操作把所有的s[k],k&1=1s[k],k\&1=1取相反数就好了区间加法?假设我们已经知道了原来的所有的答案现在的数从原来的a[原创 2018-03-13 15:24:16 · 289 阅读 · 0 评论 -
【BZOJ1835】基站选址(线段树)
题面BZOJ题解考虑一个比较暴力的dpdp设f[i][j]f[i][j]表示建了ii个基站,最后一个的位置是jj的最小代价考虑如何转移f[i][j]=min(f[i−1][p]+Cost(p+1,j)+C[j])f[i][j]=min(f[i-1][p]+Cost(p+1,j)+C[j])其中CostCost表示代价,也就是区间内所有没有被覆盖的村庄的WW的和如果直接暴力dpdp,复杂度O(n2k)原创 2018-03-13 15:26:12 · 477 阅读 · 0 评论 -
【BZOJ1858】序列操作(线段树)
题面BZOJ题解这题思路很简单,细节很烦,很码维护区间翻转和区间赋值标记当打到区间赋值标记时直接覆盖掉翻转标记下放标记的时候先放赋值标记再放翻转标记这样可以维护前4个操作对于第5个操作维护区间从左/右端点开始的最大连续0/10/1的个数以及区间内的最大连续0/10/1的个数做区间翻转的时候所有的关于0/10/1连续个数的计数全部要交换过来其他的细节自己注意一下#include<iostream>#原创 2018-03-13 15:29:03 · 325 阅读 · 0 评论 -
【BZOJ4999】This Problem Is Too Simple!(线段树)
题面BZOJ题解对于每个值,维护一棵线段树就好啦动态开点,否则空间开不下剩下的就是很简单的问题啦当然了,对于数值要离散化没必要离线吧,在线用mapmap维护就行了#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>#include<set原创 2018-03-13 15:31:24 · 231 阅读 · 0 评论 -
【BZOJ4991】我也不知道题目名字是什么(线段树)
题面BZOJ题解对于线段树维护的区间维护以下东西:区间左(右)端开始(结束)的最长(短)子串的长度左端右端的值,以及当前区间内的答案每次向上合并只需要分类讨论即可#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>#include<set原创 2018-03-13 15:34:07 · 305 阅读 · 0 评论 -
【BZOJ2733】永无乡(线段树,并查集)
题面BZOJ题解线段树合并线段树合并是一个很有趣的姿势前置技能:动态开点线段树具体实现:每次合并两棵线段树的时候,假设叫做t1,t2t1,t2,其中要把t2t2合并进t1t1中假设当前位置t1t1没有节点,则直接把t2t2的这个位置给t1t1(直接接上去就好啦)如果t2t2这个位置没有节点,那么直接returnreturn否则,两个位置都有节点,把两个节点的信息合并,然后递归合并左右子树简单的代码如原创 2018-03-13 17:08:59 · 238 阅读 · 0 评论 -
【BZOJ4817】树点涂色(LCT,线段树,树链剖分)
题面BZOJDescriptionBob有一棵n个点的有根树,其中1号点是根节点。Bob在每个点上涂了颜色,并且每个点上的颜色不同。定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色。Bob可能会进行这几种操作: 1 x: 把点x到根节点的路径上所有的点染上一种没有用过的新颜色。 2 x y: 求x到y的路径的权值。 3 x y: 在以x为根的子树中选择一个点原创 2018-03-24 17:20:48 · 243 阅读 · 0 评论 -
【BZOJ2141】排队(树套树)
题面BZOJ 洛谷题解傻逼题啊。。。 裸的树套树 树状数组套线段树,每次交换的时候,考虑一下前后的贡献,先删掉贡献,再重新算一遍就好了。。#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>#include<set>#includ原创 2018-04-09 19:40:52 · 296 阅读 · 0 评论 -
【BZOJ1396】识别子串&【BZOJ2865】字符串识别(后缀自动机)
题面自从有了DBZOJ 终于有地方交权限题了题解很明显,只出现了一次的串 在SAMSAM的right/endposright/endpos集合大小一定为11 换句话说,在parentparent树上是叶子节点 找到所有这样的节点, 假设它的len=rlen=r,它父亲的len=plen=p,它的结束位置为显然就是rr 令l=r−pl=r-p 以rr结尾, 并且只出现了一次的串的左端点原创 2018-04-02 17:07:57 · 313 阅读 · 0 评论 -
【BZOJ1493】项链工厂(线段树)
题面BZOJ 洛谷DescriptionT公司是一家专门生产彩色珠子项链的公司,其生产的项链设计新颖、款式多样、价格适中,广受青年人的喜爱。最近T公司打算推出一款项链自助生产系统,使用该系统顾客可以自行设计心目中的美丽项链。该项链自助生产系统包括硬件系统与软件系统,软件系统与用户进行交互并控制硬件系统,硬件系统接受软件系统的命令生产指定的项链。该系统的硬件系统已经完成,而软件系统尚未开发,T公司的原创 2018-04-02 21:34:59 · 161 阅读 · 0 评论 -
【BZOJ3196】二逼平衡树(树状数组,线段树)
题面BZOJ题面题解如果不存在区间修改操作: 搞一个权值线段树 区间第K大—>直接在线段树上二分 某个数第几大—>查询一下区间的size和 某个数的前缀—>先查一下他是区间第几大,再求他-1大 某个数的后缀—>和上面那个有区别吗???现在有了区间修改操作 多搞一个树状数组 套在一起就好啦 暴力开点开不下的 要动态开点#include<iostream>#include<cstdi原创 2018-01-08 16:39:00 · 456 阅读 · 0 评论 -
【BZOJ4071】八邻旁之桥(线段树)
题面BZOJ权限题,洛谷链接题解既然k<=2k<=2 那么,突破口就在这里分类讨论 ①k=1k=1 这。。。不就是中位数吗。。。。 直接把所有起点重点排个序, 算下中位数就行啦 ②k=2k=2 似乎不好搞了 orz ZSY Dalao 我太弱了 我就是一个Vegetable Chicken ZSY看一眼就会做首先,我们来看一看,如果有两座桥, 一个人会怎么动呢? 如果原创 2018-01-05 21:51:21 · 369 阅读 · 0 评论 -
【BZOJ4869】相逢是问候(线段树,欧拉定理)
题面BZOJ题解根据欧拉定理递归计算(类似上帝与集合的正确用法) 所以我们可以用线段树维护区间最少的被更新的多少次 如果超过了φ\varphi的限制 就不用再计算了 如果需要计算就每次暴力算 这样的复杂度O(nlog2)O(nlog^2)#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#incl原创 2018-01-22 17:26:44 · 263 阅读 · 0 评论 -
【NOIP2012】【CJOJ1093】【洛谷1083】借教室
题面Description在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。 面对海量租借教室的信息,我们自然希望编程解决这个问题。 我们需要处理接下来n天的借教室信息,其中第i天学校有ri个教室可供租借。共有m份 订单,每份订单用三个正整数描述,分别为dj,sj,tj,表示某租借者需原创 2017-07-13 15:22:56 · 266 阅读 · 0 评论 -
【HDU1754】I hate it!
题面很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。 这让很多学生很反感。 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。Input本题目包含多组测试,请处理到文件结束。 在每个测试的第一行,有两个正整数 N 和 M ( 0Output对于每一次询问操作,在一行里面输出最高成绩。Sa原创 2017-07-22 22:41:37 · 254 阅读 · 0 评论 -
HDU1166敌兵布阵(线段树,树状数组)
题面 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视。中央情报局要研究敌人究竟演习什么战术,原创 2017-08-14 20:41:03 · 359 阅读 · 0 评论 -
【洛谷3834】 【模板】可持久化线段树 (主席树)
题面具体题目不再叙述,参考洛谷 题目大意,求区间[l,r]中第k大的树题解主席树很经典的运用 首先将值离散化之后,构建一颗值域线段树 储存区间和 0版本的线段树是空树 每次在值域上增加1就重构一颗线段树很显然,任意两颗相邻线段树的值得和差为1 而相同的区间内要么相等要么多1那么,我们也很容易的可以推出,区间第k大可以通过第r版本和第(l-1)版本的线段树算出来 每次计算左儿子 如果r原创 2017-08-21 23:40:07 · 883 阅读 · 0 评论 -
【CJOJ2316】【模板】可持久化线段树
题面Description这是一道非常直白的可持久化线段树的练习题,目的并不是虐人,而是指导你入门可持久化数据结构。 线段树有个非常经典的应用是处理RMQ问题,即区间最大/最小值询问问题。现在我们把这个问题可持久化一下: Q k l r 查询数列在第k个版本时,区间[l, r]上的最大值 M k p v 把数列在第k个版本时的第p个数修改为v,并产生一个新的数列版本 最开始会给你一个数列,作原创 2017-08-20 14:37:56 · 328 阅读 · 0 评论 -
【BZOJ1798】【AHOI2009】维护序列
题目链接题解这不就是luogu的线段树2的板子吗。。。。 没有任何的区别。。。 上代码吧。。。#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>#include<set>#include<map>#include<vector>原创 2017-10-03 17:12:55 · 279 阅读 · 0 评论 -
【BZOJ4538】【HNOI2016】网络
题目链接,我是真的懒得调题目的格式。。。题解树链剖分搞一下LCA 把线段树弄出来 这只是形式上的线段树 本质上是维护一段区间的一个堆 每次把堆插入节点, 询问的时候查询线段树上的堆的最大值就行了 但是在插入节点的时候 把节点插入到非当前树链剖分经过的节点中 这里要稍微处理一下。#include<iostream>#include<cstdio>#include<cstdlib>原创 2017-10-03 17:17:06 · 275 阅读 · 0 评论 -
【BZOJ4196】【NOI2015】软件包管理器(树链剖分,线段树)
【BZOJ4196】【NOI2015】软件包管理器题面题目描述Linux用户和OSX用户一定对软件包管理器不会陌生。通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖(即下载安装这个软件包的安装所依赖的其它软件包),完成所有的配置。ebian/Ubuntu使用的apt-get,Fedora/CentOS使用的yum,以及OSX下可原创 2017-10-20 14:18:12 · 211 阅读 · 0 评论 -
【BZOJ2243】【SDOI2011】染色
题面我们也要换个花样,这回提供洛谷的题面题解线段树+树链剖分大水题 维护颜色段的方法很简单呀。。。 维护当前区间内的颜色段个数, 以及当前区间左端和右端的颜色, 合并的时候考虑是否要减一下就行了 至于跳LCA进行Modify的时候稍微注意一下细节#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#原创 2017-10-15 19:40:11 · 327 阅读 · 0 评论 -
【Luogu1973】仓配置
【Luogu1973】仓配置题面直接找洛谷把。。。题解很明显的贪心吧 按照线段的右端点为第一关键字,左端点第二关键字排序 然后线段树维护区间最小就可以啦#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>#include<set>#原创 2017-10-15 19:48:05 · 223 阅读 · 0 评论 -
【SHOI2012】魔法树
【SHOI2012】魔法树题面BZOJ上找不到这道题目 只有洛谷上有。。 所以粘贴洛谷的题面题解树链剖分之后直接维护线段树就可以了 树链剖分良心模板题#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>using namespace原创 2017-10-15 19:53:35 · 558 阅读 · 0 评论 -
【BZOJ1012】【JSOI2008】最大数
【JSOI2008】题目描述现在请求你维护一个数列,要求提供以下两种操作:1、 查询操作。语法:Q L功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。限制:L不超过当前数列的长度。2、 插入操作。语法:A n功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾。限制:n是整数(可能为负数)并原创 2017-10-15 20:03:04 · 223 阅读 · 0 评论 -
【Luogu3398】仓鼠找sugar(树链剖分)
题面题目描述小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n。地下洞穴是一个树形结构。这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而他的基友同时要从他的卧室(c)到图书馆(d)。他们都会走最短路径。现在小仓鼠希望知道,有没有可能在某个地方,可以碰到他的基友?小仓鼠那么弱,还要天天被zzq大爷虐,请你快来救救他吧!输入输出格式输入格式: 第一行两个正整数n和q原创 2017-12-02 08:42:28 · 298 阅读 · 0 评论 -
【BZOJ1018】堵塞的交通(线段树)
题面Description 有一天,由于某种穿越现象作用,你来到了传说中的小人国。小人国的布局非常奇特,整个国家的交通系统可 以被看成是一个2行C列的矩形网格,网格上的每个点代表一个城市,相邻的城市之间有一条道路,所以总共有2C个 城市和3C-2条道路。 小人国的交通状况非常槽糕。有的时候由于交通堵塞,两座城市之间的道路会变得不连通, 直到拥堵解决,道路才会恢复畅通。初来咋到的你决心毛遂自荐原创 2018-01-01 20:30:28 · 741 阅读 · 0 评论 -
【BZOJ3531】旅行(树链剖分,线段树)
题面DescriptionS国有N个城市,编号从1到N。城市间用N-1条双向道路连接,满足 从一个城市出发可以到达其它所有城市。每个城市信仰不同的宗教,如飞天面条神教、隐形独角兽教、绝地教都是常见的信仰。为了方便,我们用不同的正整数代表各种宗教, S国的居民常常旅行。旅行时他们总会走最短路,并且为了避免麻烦,只在信仰和他们相同的城市留宿。当然旅程的终点也是信仰与他相同的城市。S国政府为每个城市标原创 2017-12-26 17:20:50 · 308 阅读 · 0 评论 -
【BZOJ3295】动态逆序对(线段树,树状数组)
题面Description对于序列A,它的逆序对数定义为满足iInput输入第一行包含两个整数n和m,即初始元素的个数和删除的元素个数。以下n行每行包含一个1到n之间的正整数,即初始排列。以下m行每行一个正整数,依次为每次删除的元素。Output输出包含m行,依次为删除每个元素之前,逆序对的个数。Sample Input5 4153425142Sample Output5221题解显然可以CDQ分治原创 2017-12-27 19:52:47 · 286 阅读 · 0 评论 -
【Luogu1471】方差(线段树)
题面这种傻逼题。。。自己去看把。。题解这题太傻比了 把方差公式拆开 维护平方和和区间和 修改就把平方和的公式拆开 简直傻逼的题目#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>#include<set>#include<ma原创 2017-12-29 09:43:13 · 325 阅读 · 0 评论 -
【CF666E】Forensic Examination(后缀自动机,线段树合并)
题面洛谷 CF翻译: 给定一个串SS和若干个串TiT_i 每次询问S[pl..pr]S[pl..pr]在Tl..TrT_l..T_r中出现的最多次数,以及出现次数最多的那个串的编号。题解好题啊。我们对于所有的TT串构建出广义后缀自动机之后 把SS丢到SAMSAM上匹配,对于每组询问, 相当于回答S[pl..pr]S[pl..pr]所代表的节点的rightright集合所代表的串的众数是哪个原创 2018-04-12 09:15:41 · 236 阅读 · 0 评论