线段树
200815147
这个作者很懒,什么都没留下…
展开
-
HDU6054 String and String 广义后缀自动机+树状数组套线段树
存一下代码。广义SAM是正版的。Code#pragma comment(paintr, "/STACK:102400000,102400000") #include<bits/stdc++.h>using namespace std;#define LL long long#define pa pair<int,int>const int Maxn=400010,N=390;const int inf=2147483647;const double pi=acos原创 2021-02-28 16:09:01 · 245 阅读 · 0 评论 -
[BZOJ]5312: 冒险 线段树 复杂度分析
DescriptionKaiser终于成为冒险协会的一员,这次冒险协会派他去冒险,他来到一处古墓,却被大门上的守护神挡住了去路,守护神给出了一个问题,只有答对了问题才能进入,守护神给出了一个自然数序列a,每次有一下三种操作。1,给出l,r,x,将序列l,r之间的所有数都 and x2,给出l,r,x,将序列l,r之间的所有数都 or x3,给出l,r,询问l,r之间的最大值题解:去年...原创 2018-12-11 17:08:38 · 323 阅读 · 0 评论 -
[LOJ]#2113. 「HNOI2015」接水果 整体二分+扫描线+线段树/树状数组
题解:这种题目一看就和dfsdfsdfs序有关。考虑对于一条链,哪些链能够覆盖它。分两种情况,为了方便,链的两端点分别为x,yx,yx,y,且in[x]&lt;=in[y]in[x]&lt;=in[y]in[x]<=in[y]。1、in[x]&lt;=in[y]in[x]&lt;=in[y]in[x]<=in[y]且in[y]&lt;=out...原创 2018-12-27 07:34:55 · 156 阅读 · 1 评论 -
[LOJ]#2585. 「APIO2018」新家 线段树+multiset
题解:容易想到按照时间轴扫过去,然后二分答案。但是我们需要判断一个区间内是否出现了所有类型的商店,这是个区间数颜色,只有离线才有比较高效的做法。但我们并不需要数颜色,而只是需要区间是否包含所有颜色,所以得到了下面的做法:在坐标轴最后加每类商店各一个,然后判断[L,R][L,R][L,R]是否包含所有颜色就可以转化为[R,inf)[R,inf)[R,inf)的前驱最小值是否小于LLL。前驱后继用m...原创 2018-12-26 14:31:28 · 162 阅读 · 1 评论 -
1766 树上的最远点对 线段树+最近公共祖先
题解:看到多个区间询问就应该要考虑用数据结构维护了。考虑用线段树,每个区间维护两个点,表示编号在这个区间内的点构成的树的直径的两个端点,然后就可以直接合并了。合并的时候要求O(1)O(1)O(1)求出两点之间的距离,要用那种rmq的LCA,否则复杂度是O(nlog2n)O(nlog^2n)O(nlog2n)的。这个东西还可以用来解决去掉某棵子树之后的树的直径等跟直径有关的问题。代码:#i...原创 2018-11-24 13:37:55 · 181 阅读 · 0 评论 -
吉老师线段树(hdu5306 bzoj4695)
前言:今天突然想学一学这个,那就学一学,资料可以在lzz的uoj博客找到。核心:(我只学了区间取min\minmin和max\maxmax,不会历史最值)以取min\minmin为例子,那么我们需要维护区间最大值mxmxmx,次大值sesese,最大值出现次数ccc,区间和sumsumsum,然后分下面几种情况(设当前区间的值改为min(ai,v)\min(a_i,v)min(ai...原创 2018-09-26 14:51:01 · 1783 阅读 · 1 评论 -
Codeforces 575A. Fibonotci 矩阵乘法+线段树
题解:这道题……看完题就大概知道怎么做,但是考试时没有实现出来。 考试的时候想的是用倍增来实现,但是细节太多写不出来,正解是用线段树来维护连续n个矩阵的乘积,其实这个做法也挺显然的,但是没有把这两个东西放在一起用过。然后细节还是很多,调了一下午。代码:#include<bits/stdc++.h>using namespace std;#define LL lon...原创 2018-08-23 20:36:37 · 265 阅读 · 2 评论 -
4302 Interval GCD 线段树
描述 给定一个长度为N的数列A,以及M条指令 (N≤5*10^5, M<=10^5),每条指令可能是以下两种之一: “C l r d”,表示把 A[l],A[l+1],…,A[r] 都加上 d。 “Q l r”,表示询问 A[l],A[l+1],…,A[r] 的最大公约数(GCD)。题解:今天才会维护区间gcd……我真菜…… 如果是单点修改的话相信大家都会,所以这题的方法也是...原创 2018-07-19 11:53:18 · 986 阅读 · 0 评论 -
hdu5217 线段树
题解:考试的时候连O(nlog2n)O(nlog2n)O(nlog^2n)的做法都没有想出来啊,太菜了……只询问第k位是哪种括号就很简单了,直接用线段树维护就好了,对于第k位在原来的位置,其实也可以搞,就在线段树上二分一下就好了,具体如何二分呢?对于每个区间,最后消完之后一定都是若干个(加上若干个)的形式,那么从左到右(的数量是单调不减的,)也同理,那么我们可以直接二分,做到O(nlog2n)...原创 2018-04-20 17:03:22 · 193 阅读 · 0 评论 -
TJOI2014day1 bzoj 5154~5156
前言:发现这套题目挺简单的……于是来水一篇博客。5154: [Tjoi2014]匹配:这题暴力的一匹……直接先跑一次费用流得出答案,然后再看一下删除原来的匹配边之后能不能再跑出原来的答案即可。代码:#include<bits/stdc++.h>using namespace std;#define LL long long#define pa pair<...原创 2018-04-22 19:39:30 · 150 阅读 · 0 评论 -
20180409胡策C 线段树优化DP
题目描述:题解:O(n2)O(n2)O(n^2)DP应该一眼秒吧……f[i]f[i]f[i]表示前i的最小花费,sw[i]sw[i]sw[i]表示w的前缀和,那么有DP方程:f[i]=min(f[i],f[j]+(h[i]−h[j])2+sw[i−1]−sw[j])(1<=j<i),f[1]=0f[i]=min(f[i],f[j]+(h[i]−h[j])2+sw[i−1...原创 2018-04-09 17:37:47 · 205 阅读 · 0 评论 -
[BZOJ]3958: [WF2011]Mummy Madness 二分+扫描线+线段树
Description在2011年ACM-ICPC World Finals上的一次游览中,你碰到了一个埃及古墓。不幸的是,你打开了坟墓之后,才发现这是一个坏主意:突然之间,原本空无一物的沙漠上已经爬满了暴躁的木乃伊。(如果你也沉睡几千年而突然被惊醒,你也会变得如此暴躁的。)(幸运的是,当你做完这道题的时候,你醒来了,发现你在弗罗里达的酒店里。那些木乃伊只是一场梦。)面对这一大堆疯狂的木乃伊...原创 2019-01-18 22:18:45 · 227 阅读 · 0 评论 -
Atcoder E - Connecting Cities 线段树
Solution求最小生成树,考虑使用primprimprim算法。首先定义已在生成树中的点集为AAA,不在的为BBB。线段树维护555个量:AAA连到BBB的最小边权,A、BA、BA、B中ai+Di、ai−Dia_i+Di、a_i-Diai+Di、ai−Di的最小值。每次相当于从BBB中删去一个点,并加入AAA。Code#include<bits/stdc++.h>u...原创 2019-01-14 19:13:30 · 539 阅读 · 0 评论 -
[Codeforces] 1109F. Sasha and Algorithm of Silence's Sounds LCT+线段树
Solution假如要求的不是一棵树而是一个森林那就很好做,直接用一个双指针+LCT就可以对每个右端点维护出没有环的左端点。那么树这个限制怎么解决呢?树也就是连通块只有一个,而连通块数=点数-边数,用一个线段树维护这个东西就行了。Code#include<bits/stdc++.h>using namespace std;#define LL long long#defin...原创 2019-04-05 13:33:44 · 206 阅读 · 0 评论 -
[BZOJ]5259: [Cerc2017]区间 线段树
Description给定一个1到n的排列a1, . . . , an。对于一个区间[l, r],我们称该区间是连续的,如果将al, . . . , ar排列之后得到的是一列连续的数。(换句话说,如果x,y都在该区间中,那么所有介于x,y之间的数也在该区间中)现在有m(1 ≤ n, m ≤ 100000)个询问,每个询问给出一个区间[xi, yi],你需要找到一个长度最短的连续区间[li...原创 2019-03-25 19:06:12 · 354 阅读 · 0 评论 -
[LOJ]#2472. 「九省联考 2018」IIIDX 线段树+贪心
Solution按照大小关系连边之后得到一棵树,然后肯定是每次填入尽量大的数,如果当前连到第xxx个点,那么就需要知道当前能用的数中最大的一个有sizexsize_xsizex个数大于等于它的数,考虑如何维护这个东西。如果直接维护现在每种数剩下多少个,就很难搞,反正我是没有搞出来,考虑换一个东西,维护大于等于每种数的还有多少个数能用,这样的话每次是一个区间加减,还有一个线段树上二分的操作。注意...原创 2019-03-07 22:28:23 · 198 阅读 · 0 评论 -
[BZOJ]3711: [PA2014]Druzyny 分治+线段树
Description体育课上,n个小朋友排成一行(从1到n编号),老师想把他们分成若干组,每一组都包含编号连续的一段小朋友,每个小朋友属于且仅属于一个组。第i个小朋友希望它所在的组的人数不多于d[i],不少于c[i],否则他就会不满意。在所有小朋友都满意的前提下,求可以分成的组的数目的最大值,以及有多少种分组方案能达到最大值。Solution先列出最简单的DP:fi=max{fj+1...原创 2019-03-15 13:44:35 · 368 阅读 · 0 评论 -
[LOJ]#2773. 「ROI 2017 Day 2」学习轨迹 线段树
Solution如果只上一所学校的课,那么显然要选择这所学校的所有课程。因此,至少有一所学校选择的课程权值超过了这所学校总权值的一半。不妨强制第一所学校要超过,那么设第一所学校第一次前缀和超过总权值一半的位置为ppp,则这个位置一定要被选择。在第二所学校选择了一些课程后,一定是从ppp开始,尽量往两边扩展。枚举第二所学校选择的右端点rrr,那么每次最多会有一个位置不能再被选择。可以用两个单调栈...原创 2019-03-06 22:34:46 · 878 阅读 · 0 评论 -
[BZOJ]4515: [Sdoi2016]游戏 树链剖分+李超线段树
DescriptionAlice 和 Bob 在玩一个游戏。游戏在一棵有 n 个点的树上进行。最初,每个点上都只有一个数字,那个数字是 123456789123456789。有时,Alice 会选择一条从 s 到 t 的路径,在这条路径上的每一个点上都添加一个数字。对于路径上的一个点 r,若 r 与 s 的距离是 dis,那么 Alice 在点 r 上添加的数字是 a×dis+b。有时,Bo...原创 2019-02-25 22:21:11 · 180 阅读 · 0 评论 -
[LOJ]#2553. 「CTSC2018」暴力写挂 边分治+线段树合并
Solution这题搞了好久……不过还是挺有收获的。听说这种多棵树的题大概都是这样的套路?枚举第二棵树的LCA(x,y)LCA(x,y)LCA(x,y),然后化一下式子可以发现:depthx+depthy−depthLCA(x,y)=12(depthx+depthy+distancex,y)depth_x+depth_y-depth_{LCA(x,y)}={1\over 2}(depth_x+...原创 2019-02-28 13:42:15 · 212 阅读 · 0 评论 -
[UOJ]#410. 【IOI2018】会议 笛卡尔树+DP+线段树
Solution考虑DP。设fl,rf_{l,r}fl,r表示lll~rrr的答案,考虑这样一种转移。设[l,r][l,r][l,r]区间最大值位置为ppp,那么显然所有人要么集中到ppp左边的最优点,要么集中到ppp右边的最优点,所以方程为fl,r=min(fl,p−1+(r−p+1)hp,fp+1,r+(p−l+1)hp)f_{l,r}=\min(f_{l,p-1}+(r-p+1)h_...原创 2019-02-13 10:58:11 · 332 阅读 · 0 评论 -
[BZOJ]4527: K-D-Sequence (Codeforces 407E) 线段树
Description我们称一个数列为一个好的k-d数列,当且仅当我们在其中加上最多k个数之后,数列排序后为一个公差为d的等差数列。你手上有一个由n个整数组成的数列a。你的任务是找到它的最长连续子串,使得满足子串为好的k-d数列。Solutiond=0d=0d=0先特判。否则一个区间满足条件,当且仅当:1、区间内的数%d\%d%d相等。2、区间内没有重复的数。3、max−min...原创 2019-01-10 08:10:47 · 294 阅读 · 0 评论 -
[BZOJ]4105: [Thu Summer Camp 2015]平方运算 线段树
Solution太菜了……我打表打出来的循环节是真正的循环节+1+1+1,导致没有发现规律……发现循环节的lcmlcmlcm最大为606060,那么线段树每个区间直接维护区间循环节就可以了。Code#include<bits/stdc++.h>using namespace std;#define LL long long#define pa pair<int,in...原创 2019-01-14 22:25:30 · 175 阅读 · 0 评论 -
3165: [Heoi2013]Segment 线段树 标记永久化
Description要求在平面直角坐标系下维护两个操作: 1.在平面上加入一条线段。记第i条被插入的线段的标号为i。 2.给定一个数k,询问与直线 x = k相交的线段中,交点最靠上的线段的编号。 题解: 实现起来还是比较简单的,注意相同时输出编号较小的线段。代码:#include<cstdio>#include<cstring>#in...原创 2018-04-01 19:56:13 · 262 阅读 · 0 评论 -
[BZOJ]1969: [Ahoi2005]LANE 航线规划 离线树链剖分
离线树链剖分原创 2017-10-03 14:16:08 · 392 阅读 · 0 评论 -
3545: [ONTAK2010]Peaks 线段树合并
Description 在Bytemountains有N座山峰,每座山峰有他的高度h_i。有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问,每组询问询问从点v开始只经过困难值小于等于x的路径所能到达的山峰中第k高的山峰,如果无解输出-1。题解:将询问离线,按照x从小到大排序,每次将小于等于x的边连上,实际上就是合并一下两个点所在的线段原创 2018-01-09 13:31:29 · 222 阅读 · 0 评论 -
[BZOJ]1835: [ZJOI2010]base 基站选址 线段树+DP
线段树+DP原创 2017-09-20 11:57:19 · 291 阅读 · 0 评论 -
[BZOJ]1826: [JSOI2010]缓存交换 线段树
线段树原创 2017-09-28 14:43:00 · 289 阅读 · 0 评论 -
[BZOJ]2752: [HAOI2012]高速公路(road) 线段树
线段树原创 2017-09-19 08:12:37 · 352 阅读 · 0 评论 -
[BZOJ]4999: This Problem Is Too Simple! 树链剖分
树链剖分原创 2017-09-02 11:52:22 · 296 阅读 · 0 评论 -
[BZOJ]4418: [Shoi2013]扇形面积并 线段树
线段树原创 2017-09-18 07:37:16 · 487 阅读 · 0 评论 -
[BZOJ]2809: [Apio2012]dispatching 主席树(线段树合并)
主席树(线段树合并)原创 2017-09-16 15:31:22 · 261 阅读 · 0 评论 -
[BZOJ]2653: middle 线段树合并+二分
Description一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整。给你一个长度为n的序列s。回答Q个这样的询问:s的左端点在[a,b]之间,右端点在[c,d]之间的子序列中,最大的中位数。其中a这是一道好题。我们首先可以二分答案,然后判断是否可行。判断的话就把所有比当前二分的答案小的数设为-1,其他数设为1,原创 2017-06-29 11:20:52 · 315 阅读 · 0 评论 -
3110: [Zjoi2013]K大数查询
[置顶] 3110: [Zjoi2013]K大数查询标签: c++树套树线段树2017-07-14 09:52 31人阅读 评论(0)收藏举报分类: 树套树(3) 作者同类文章X线段树(2) 作者同类文章X版权声明:本文为博主原创文章,未经博主允许不得转载。转载 2017-08-04 14:13:28 · 294 阅读 · 1 评论 -
[BZOJ]4491: 我也不知道题目名字是什么 线段树(差分)
Description给定一个序列A[i],每次询问l,r,求[l,r]内最长子串,使得该子串为不上升子串或不下降子串这道题目有两个思路:1、对原序列差分,转化为经典问题。2、线段树维护6个东西,分别是左边开始的最长不上升序列、最长不下降序列长度,右边开始的最长不上升序列、最长不下降序列长度,本段内最长不上升序列、最长不下降序列长度。我写了后面的。代码:#include#in原创 2017-06-30 16:06:25 · 467 阅读 · 0 评论 -
[BZOJ]3747: [POI2015]Kinoman 线段树
Description共有m部电影,编号为1~m,第i部电影的好看值为w[i]。在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第f[i]部。你可以选择l,r(1Input第一行两个整数n,m(1第二行包含n个整数f[1],f[2],…,f[n](1第三行包含m个整数w[1],w[2],…,w[m](1Output输出观看原创 2017-05-14 15:31:32 · 317 阅读 · 0 评论 -
[BZOJ]3226: [Sdoi2008]校门外的区间 线段树
线段树原创 2017-09-20 18:23:52 · 244 阅读 · 0 评论 -
[BZOJ]1206: [HNOI2005]虚拟内存 线段树
线段树原创 2017-10-09 12:10:17 · 189 阅读 · 0 评论 -
arc076F - Exhausted? 二分图匹配相关+线段树
题解: 根据上面这个东西,我们就可以得到这样的一种做法:按照r排序,然后用线段树维护每个l的贡献,具体怎么做只能靠自己YY了,反正我这么弱都YY出来了,相信你也没问题的,注意ans初始值的设置。代码:#include<bits/stdc++.h>using namespace std;#define LL long long#define pa pair<in...原创 2018-04-07 19:43:36 · 353 阅读 · 0 评论 -
Codeforces 547E. Mike and Friends 后缀自动机+离线+线段树
题解:感觉这道题其实很套路啊。反正我看完题就想到了一个做法:建广义sam,离线,然后加个主席树,维护right集合,复杂度是O(nlog2n)O(nlog2n)O(nlog^2n)的,不仅时间不优秀,而且会MLE。其实离线拆询问,用一个线段树维护子树和(也就是right集合)就行了,还是太菜啊。代码:#include<bits/stdc++.h>using names...原创 2018-03-20 18:46:45 · 537 阅读 · 0 评论