线段树
Michael_GLF
AFOing
展开
-
第一届“文翁杯”现场竞技赛 T5 做作业(线段树)
传送门【题目分析】博主本着先给自己套个log的态度写了线段树。。。。。其实可以做到O(n),甚至nm都是可以的因为不超过300。。。讲讲线段树做法,因为可以将自己的笔给别人用,所以直接按题意区间加最后取个全局最大值就行了。【代码~】#include<bits/stdc++.h>using namespace std;const int MAXN=1e3+1...原创 2019-01-29 18:34:50 · 143 阅读 · 0 评论 -
校内OJ3755 数据结构题(线段树)
【题目描述】给出一个长为n的序列编号 输入格式 含义 1 1 l r 求区间[l,r]的和 2 2 l r 求区间[l,r]的最大值 3 3 l r 求区间[l,r]的最小值 4 4 l r x 将区间[l,r]内的所有数加上 x 5 5 i x 将第i个数按位异或 x 6 6 l ...原创 2019-07-19 10:20:54 · 146 阅读 · 0 评论 -
HDU1166 敌兵布阵(树状数组或线段树)
【问题描述】 C 国的死对头 A 国这段时间正在进行军事演习,所以 C 国间谍头子 Derek 和他手下 Tidy 又开始忙乎了。A 国在海岸线沿直线布置了 N 个工兵营地,Derek 和 Tidy 的任务就是要监 视这些工兵营地的活动情况。由于采取了某种先进的监测手段,所以每个工兵营地的人数 C 国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手, 但这些都...原创 2018-06-27 22:26:18 · 157 阅读 · 0 评论 -
NOIP模拟 数据结构(线段树)
【题目描述】在看了 jiry_2 的课件《Segment Tree Beats!》后,小 O 深深沉迷于这种能单次 O(logn) 支持区间与一个数取 min/max,查询区间和等信息的数据结构,于是他决定做一道与区间与 一个数取 min/max 的好题。这题是这样的:你得到了一个长度为 n 的数列{ai},要求支持以下 2 种操作:第一种是给 定 L,R,X,要求把区间中比 X 小的数字...原创 2018-10-12 20:31:27 · 200 阅读 · 2 评论 -
洛谷3870 开关(线段树)
Build后忘push_up简直有毒【题目分析】题意还是很明显的,支持区间取反,区间查询。所以我们线段树的sum数组开成二维的,第一维记录关的灯的数量,第二维记录开着的灯的数量。push_down的lazy标记就swap一下0和1的个数。查询时返回区间1的sum即可。【代码~】#include<bits/stdc++.h>using namespace ...原创 2018-10-18 15:14:04 · 206 阅读 · 0 评论 -
洛谷4513 小白逛公园(线段树)
嗒嗒嗒嗒嗒嗒【题目分析】题意。。。很明显看出要维护区间子序列最大值,那么问题就在于如何在区间合并的时候更新区间子序列最大值。可以推出,区间子序列最大值要么是从最左边开始的一段,要么是最右边向左的一段,要么是中间的一段,对于第一种,我们发现要么是左儿子最左边的一段,要么是左儿子+右儿子左边一段,第二种同理。对于第三种,要么是左儿子的最大值,要么是右儿子的最大值,要么是左儿子的右边的一...原创 2018-10-19 19:16:48 · 250 阅读 · 0 评论 -
洛谷4145 上帝造题的七分钟2 / 花神游历各国(线段树)
传送门【题目分析】题目大概就是让你维护一个数据结构,支持区间开方和区间求和————线段树!区间求和是基本操作,所以考虑如何支持区间开方。考虑一个区间a[l]~a[r],令其中最大值为a[i],最小值为a[j],所以区间极差就为a[i]-a[j],如果我们对其进行开方操作,那么极差就变为了,很明显能发现,极差变小了,所以我们得出结论:对于每一次开方操作,区间内的数都逐渐趋向相近,那么...原创 2018-10-22 12:17:47 · 274 阅读 · 0 评论 -
线段树的各种高级姿势
写在前面感谢ldx大佬的讲解!先%为敬!这篇博客主要记录的是一些线段树的例题,记住线段树的核心:标记的下放和信息的合并。高级操作走一波(打星号的贼难啊)(好吧这是基本操作)线段树支持区间加、区间乘、区间求和线段树维护区间开方和区间求和(*)线段树维护区间加、区间求和、区间历史求和、时光倒流线段树与树链剖分结合维护路径信息线段树维护最大子段和线段树维护最长连续1...原创 2018-10-22 21:12:43 · 694 阅读 · 0 评论 -
洛谷4588 数学计算(线段树)
QAQ【题目分析】思路妙妙妙啊。现在我们有q个叶子节点,权值为1的线段树,对于每次1操作,相当于将第i个叶子节点的值改为val,每次2操作就是将之前某叶节点权值改为1,最后输出根节点的权值即可。其实还算比较氵的题了。。。。【代码~】#include<bits/stdc++.h>using namespace std;typedef long long LL...原创 2018-10-23 21:29:45 · 254 阅读 · 0 评论 -
洛谷3373 线段树2(线段树)
传送门【题目分析】RT,就是线段树的模板,支持区间乘、区间加、区间求和。很有意思的一点是两个标记的下传,解决了就行了。然后这道题,作为AHOI,竟然是个裸的模板!(可能年份久远的原因吧。。。)两个一毛一样嘛!【代码~】#include<bits/stdc++.h>using namespace std;typedef long long LL;const...原创 2018-10-25 10:53:21 · 204 阅读 · 0 评论 -
洛谷1198 最大数(线段树)
洛谷传送门【题目分析】跟数学计算一题差不多。就是开一个q那么大的线段树,初始叶子节点全部为0,操作都很常规。。。。比较氵的题。【代码~】#include<bits/stdc++.h>using namespace std;const int MAXN=1e6+10;;const int INF=0x3f3f3f3f;int q,cnt;int maxx...原创 2018-10-26 22:10:30 · 188 阅读 · 0 评论 -
洛谷2221 [HAOI2012]高速公路(线段树)
传送门【题目分析】蒟蒻考完只能刷水题,还被水题翻来覆去的吊打qwq对于给定区间[l,r],考虑计算它的期望费用,就是 总的费用/总的情况数总的情况数很好确定,我选择规定可以第一次选的比第二次大,所以计算总贡献后要乘2。然后考虑计算总的费用。考虑一个点i,,那么他能产生的贡献就是包含该点的区间数*该点费用,总的费用公式就是下面这个式子:,然后把括号打开,得到整理一下:...原创 2018-11-23 21:12:39 · 195 阅读 · 0 评论 -
洛谷2572 【SCOI2010】序列操作(线段树)
传送门【题目分析】线段树大板题,主要就是靠码量和debug能力。。。既然涉及到区间取反,那么同时记录0和1的信息。对于0,1操作,打上区间覆盖标记即可。对于2操作,打区间取反标记,但注意如果该区间已经打了区间覆盖标记,那么其实取反标记作用只是将0改为1,所以可以直接将区间取反标记赋为0,覆盖标记取亦或。对于3操作,直接统计即可。对于操作4,考虑两种情况:1.当前区间ma...原创 2018-12-22 16:07:28 · 240 阅读 · 0 评论 -
洛谷3224 【HAOI2012】永无乡(线段树合并)
传送门【题目分析】线段树合并裸题了吧。。。。将每个岛视作一棵权值线段树,然后直接按照题目意思去进行合并,由于只有查询第K大岛的询问,所以merge过程就直接递归到叶子节点,一直合并size即可。第一次写线段树合并结果有一个地方写错调了半天,唉。。。【代码~】#include<bits/stdc++.h>using namespace std;const i...原创 2019-01-19 14:20:52 · 184 阅读 · 0 评论 -
洛谷3880 二逼平衡树(树套树)
传送门【题目分析】数据结构好难啊qwq。。。。参考了这篇博客:传送门考虑前驱后继,用平衡树来维护,又涉及区间操作,外层再套一个线段树维护。操作1,相当于求区间[l,r]有多少个比k小的数。操作2比较麻烦,发现因为所有值在[0,1e8]之间,所以考虑二分求解,用类似1的操作求mid在区间的排名。操作3,直接线段树上单点修改,记得修改原数组的值。操作4,5直接区间求前驱...原创 2019-01-22 10:55:50 · 209 阅读 · 0 评论 -
NOIP模拟 雪地(线段树)
传送门【题目分析】我的天3.5h就打了这一道。。。。。debug能力太弱了qwq以后得打打模拟了。。。。。受middle这道题的启发,很明显如果将厚度先排一个序,那么两个不同的h[i]和h[i+1]之间的最小答案都是一定的,所以直接统计当厚度在h[i]~h[i+1]之间的最小厚度与d进行比较就可以了。所以就考虑如何计算最小的厚度?可以发现,将所有大于当前厚度的位置设为1,那么最小厚...原创 2019-01-25 13:40:18 · 153 阅读 · 0 评论 -
【SHOI2015】 脑洞治疗仪(线段树)
氵谷传送门网上看到ODT吊打线段树的dalao。。。STO但我不会ODT所以只能写线段树QAQ三个操作分别对应:区间赋值为0,区间求1个数赋值为0再在指定区间从左往右填0,查询区间最长0。第一个和第三个操作比较常规,难点在第二个。一开始想的是直接统计1个数赋值,但可能被这种hack:将第五个挖出放在前四个中,最后就应该是1 1 0 1 0,但错误做法会变成 1 1 1 1 ...原创 2019-08-09 10:36:42 · 182 阅读 · 0 评论