线段树
Hanks_o
一名。
展开
-
bzoj1012: [JSOI2008]最大数maxnumber(线段树)
题目传送门 这道题是线段树的一个重要的题型吧(并不清楚重不重要) 要求最后L个数的最大值并不难。 但是他的数是一个一个插进来的。 第一次遇到这种问题可能会蒙蔽。。首先先建一棵空树就行了。 每次插入的数就相当于在那个位置修改一下值就行。 然后求一求最大值。。#include<cstdio> #include<cstring> #include<cstdlib> #include<iostr原创 2017-09-16 15:03:18 · 334 阅读 · 0 评论 -
bzoj5194: [Usaco2018 Feb]Snow Boots(线段树)
题目传送门 。 解法: 线段树维护一个01序列。 0表示不可以跳。1表示可以跳。 那么每次只需要求最长一段连续的0的长度就行。 如果可以跳过去那么其他也可以跳过去。 如果跳不过去那就不行。 然后那这样每次询问都插岂不是会爆。 那离线一下咯。 询问排下序。 从小到大插。 代码实现: #include<cstdio> #include<cstring&g...原创 2018-04-18 08:07:23 · 469 阅读 · 0 评论 -
bzoj5168&5029: [HAOI2014]贴海报(线段树)
题目传送门 5029一样 解法: 离散化。 覆盖段。 代码实现: #include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #include<algorithm> #include<queue> #include<cma...原创 2018-04-17 19:14:42 · 436 阅读 · 0 评论 -
bzoj1858: [Scoi2010]序列操作(线段树)
题目传送门 。 解法: 线段树。 因为01要交换。 所以0和1的信息都要维护。 维护最长连续一段,总数,从左端点连续,从右端点连续。 然后打上覆盖和翻转标记。 不允许两种标记同时存在。 如果要打覆盖标记,那么翻转标记就没用了。 如果打翻转标记,那么覆盖标记取反就行。 代码实现: #include<cstdio> #include<cstring> #...原创 2018-04-16 13:13:07 · 332 阅读 · 0 评论 -
bzoj3747: [POI2015]Kinoman(线段树)
题目传送门 。 解法: 线段树。 枚举左端点,用线段树维护以每个点作为右端点的答案。 对于不同的左端点,右端点的答案是不一样的。 设当前位置为i,电影为x,好看值为w,下个出现的位置为nxt。 在统计完以i为左端点的答案后。 我们需要往下枚举左端点。 这时候我们就算过了i这个位置。 要消除它对答案的影响。 那么从以位置i到nxt-1为右端点都无法再获得x的好看值。 那么i到...原创 2018-04-07 16:52:33 · 243 阅读 · 0 评论 -
bzoj3212: Pku3468 A Simple Problem with Integers(线段树)
题目传送门 。 解法: 线段树改段求段。 打懒标记。 代码实现: #include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #include<cmath> #include<queue> #include<algorit...原创 2018-03-24 16:15:22 · 158 阅读 · 0 评论 -
bzoj4552: [Tjoi2016&Heoi2016]排序(二分+线段树)
题目传送门 神! 解法: 直接做难做。考虑线段树维护。 二分答案。大于等于答案的设为1。比答案小的设为0。 可以用线段树快速统计出区间1和0的个数。 如果是升序的话就把所有0排在前面。 降序则反之。 最后看下q这个位置是否为1即可。 代码实现: #include<cstdio> #include<cstring> #include<cstdlib&...原创 2018-03-14 20:20:03 · 354 阅读 · 0 评论 -
bzoj1230: [Usaco2008 Nov]lites 开关灯(线段树)
题目传送门 ….. 解法: 裸线段树。。 打个lazy。。 代码实现: #include #include #include #include #include #include #include using namespace std; struct node {int l,r,lc,rc,c,n,lazy;}tr[210000];int len; void bt(int l,i原创 2018-01-20 16:19:55 · 320 阅读 · 0 评论 -
bzoj3211: 花神游历各国(线段树)
题目传送门 。 解法: 线段树。 开根的话想了很久不知道整段咋开。。 然后。。 发现数字不会变。 那么一个数开几次就变成0或1了就没得变了。 那么我们就可以不动他。 那么我们记录区间最大值。 如果区间最大值小于等于1的话就不用往下开咯。 小小的优化。 开根就暴力咯。 代码实现: #include #include #include #include #include原创 2018-01-19 21:00:37 · 223 阅读 · 0 评论 -
bzoj1957: 楼房重建(线段树)
题目传送门 。。 解法: 有点玄学呀。。 区间维护两个值。 一个值维护这个区间有多少个能被看到。。而仅仅只是这个区间里面不受区间外的影响。 一个值维护区间最大斜率。 那么怎么维护答案呢。 首先对于一个区间。分成两段,分别为左区间和右区间。 左区间肯定不受右区间影响。 所以可以直接继承。 那么右区间的就会受左区间的最大值影响。 分情况讨论。 设右区间为x。左区间的最大值为t原创 2018-01-21 16:41:32 · 330 阅读 · 0 评论 -
bzoj1798: [Ahoi2009]Seq 维护序列seq(线段树)
题目传送门 线段树真恶心。解法: 线段树。。 整段修改的题目一般都要用lazy标记。 这道题打两个标记,一个乘标记,一个加标记。 在乘的时候一定要把加标记也乘上。 乘法分配率啊。 唯一恶心的就是标记的下放顺序。 是先加呢还是先乘呢? 肯定是先乘啦。 为什么? 如果先加的话有可能把本来不要乘的东西乘了。先加肯定错。 那为什么先乘呢? 先乘也有可能把本来要乘的东西没有乘了呀。没原创 2017-11-03 14:53:29 · 446 阅读 · 0 评论 -
bzoj2243: [SDOI2011]染色(树链剖分+线段树)
题目传送门 开心的我又看错了题目。一开始看成是一段序列了那直接上线段树不就完了呗。 打个懒标记。维护一下区间有多少种颜色以及边界都是什么颜色。 打完了代码又去看题。发现是在一棵树上。。 哦那就加个树剖呗。解法: 线段树维护四个特征值: 区间内有多少段颜色。 区间内颜色是否统一,统一的话是什么颜色。 区间左端点是什么颜色。 区间右端点是什么颜色。 然后上树剖。 如果当前这一段跟上原创 2017-10-23 10:46:31 · 292 阅读 · 0 评论 -
bzoj4034: [HAOI2015]树上操作(树链剖分+线段树)
题目传送门 水经验。解法: 就写个树剖呗。 然后用线段树维护一下呗。 维护整一段的和。 打个懒标记。代码实现:#include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #include<algorithm> #include<cmath> #include<queue> using namespace s原创 2017-10-30 11:23:14 · 397 阅读 · 0 评论 -
bzoj3531: [Sdoi2014]旅行(树链剖分+线段树)
题目传送门 。 解法: 据说叫动态开点。 需要用的点才建线段树。 那么最多只有二十万种不同的信息。。 跟主席树一样嘛。 YY就好了 代码实现: #include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #include<algorithm...原创 2018-04-22 16:27:30 · 269 阅读 · 0 评论