线段树
文章平均质量分 92
zxyoi_dreamer
退役了退役了爬了爬了,搞个锤子算法竞赛,不如好好享受大学生活。
展开
-
【洛谷P2839】middle(二分答案)(主席树)
传送门题解:复习一下常见的trick。求中位数转化为二分答案,大于等于的部分设置成 111 小的部分设置成 −1-1−1然后求和,看结果是否大于等于 000 来判断是否可行。这道题直接按照权值排序,以原序列标号为下标建立主席树,叶节点权值为在当前树中它应该为的权值,对于询问,中间的询问和,两边的询问最大前后缀即可。代码:#include<bits/stdc++.h>#...原创 2020-04-23 20:39:40 · 428 阅读 · 0 评论 -
【UR#8】决战圆锥曲线(线段树)
传送门题解:首先考虑暴力扫一遍出答案。然后注意到可能成为答案的 i,ji,ji,j 必然满足 i<j,yi>yji < j ,y_i>y_ji<j,yi>yj由于 yyy 是随机生成,期望的后缀最大值只有 O(logn)O(\log n)O(logn) 个。于是我们直接用线段树找到后缀最大值即可,维护可以直接维护区间最大值,然后从右儿子开始df...原创 2020-04-16 15:03:31 · 321 阅读 · 0 评论 -
【2015集训队互测】机器人/Robot(超哥线段树)
传送门超哥线段树板子题。好像这是我又一次直接在考场上莽出来板子,之前一次超哥线段树都没有写过。上一次莽出来板子还是后缀平衡树。题解:简单叙述一下超哥线段树是怎么做的,其实知道原理就是瞎写了。我们要解决的问题是在二维平面上插入一条直线(线段的情况过会讨论),同时询问某个 x=x0x=x_0x=x0 上最高(或最低)的直线。首先强制在线的话可以转成半平面交或者凸包搞。否则我们可以用...原创 2020-04-14 15:38:01 · 306 阅读 · 0 评论 -
【USACO19FEB】Mowing Mischief P(决策单调性)(线段树辅助分治)
传送门题解:容易想到首先要求一个LIS。根据以其结尾的LIS长度,把点分为若干集合,设为 SlS_lSl,容易注意到一个集合中横坐标增加的同时纵坐标减小。容易得到一个显然的DP:dpi=minj∈Sl−1xj<xi,yj<yidpj+(xi−xj)∗(yi−yj)dp_i=\min_{j\in S_{l-1}x_j<x_i,y_j<y_i}dp_j+(x_i-...原创 2020-04-13 16:37:27 · 726 阅读 · 0 评论 -
【CometOJ4303】小 C 的可重集(线段树)(随机二分)
传送门题解:这种不可枚举的数量里面求第 KKK 大显然是二分。问题在于这道题似乎并不好直接二分,没法对 O(n2)O(n^2)O(n2) 个串确定顺序。首先注意到这里的大小关系给的非常的迷,这就导致有一点很妙,对于一个集合,新加一个数,得到的集合一定比原集合小。于是确定左端点的时候,集合大小关于右端点单调。现在还有一个无法二分的问题,这个完全不用在意,在可能集合中随机一个集合即可,容...原创 2020-03-14 16:56:36 · 258 阅读 · 0 评论 -
【USACO20FEB】Help Yourself P(线段树)(二项式展开)
传送门题解:首先这种求 kkk 次幂,kkk又那么小,显然就是二项式展开维护各个自然幂之和。于是一个比较显然的想法就是考虑一个一个加入,那么会有一部分不变,另一部分+1,维护总和和其中某个部分即可。按照左端点排序加入,维护一下右端点的前缀和即可。代码:#include<bits/stdc++.h>#define ll long long#define re regi...原创 2020-03-11 17:47:30 · 514 阅读 · 0 评论 -
【校内模拟】《名字叫《几何考试》结果连计算几何的屁股都没有摸到的题》(积分)(主席树)(大力分类讨论)
一般来说大力分类讨论就行了,但是其实如果把积分放到图形上的话其实可以维护地简单一点。下面给一个大力分类讨论的做法的代码。由于讨论得太复杂,常数有点大,不过至少正确性没有什么问题。代码:#include<bits/stdc++.h>#define ll long long#define re register#define db double#define cs con...原创 2020-02-14 14:16:08 · 208 阅读 · 0 评论 -
【校内模拟】小B的农场(单调栈)(线段树)
简要题意:你有一个 W×HW \times HW×H 的矩形,中间一些位置上有树。请你求一个空矩形(允许边界有树),最大化周长。W,H≤1e8W,H\leq 1e8W,H≤1e8,树的个数 ≤3e5\leq 3e5≤3e5题解:容易注意到答案至少是 2×max(W,H)+22\times \max(W,H)+22×max(W,H)+2。因为不管树怎么排,宽度为 111 的矩形永远都是...原创 2020-02-08 14:57:37 · 201 阅读 · 0 评论 -
【校内模拟】八云蓝(线段树)(大力分类讨论)
题解:线段树,大力分类讨论访问到节点是因为定位到节点自身还是因为定位子树内节点。发现是个与ql,qrql,qrql,qr有关的二元二次函数,维护子树内部的和,没了。分类讨论的相关细节这里不再讲解。代码:#include<bits/stdc++.h>#define ll long long#define re register#define cs constname...原创 2019-11-11 16:33:36 · 213 阅读 · 0 评论 -
【校内模拟】黑白划分(线段树)(容斥)
简要题意:给你一个纯白的,边长为2n2^n2n的正方形。修改操作为翻转这个正方形某一行或某一列所有格子的颜色。一个正方形如果为纯色,权值为1,否则权值为四个小正方形权值之和+1,请你在每次修改之后回答当前正方形的权值。要求单次做到O(n)O(n)O(n)。题解:其实算权值的操作本质上就是分裂。访问到的正方形总数就是权值。一个正方形会被访问当且仅当它所在行会被单独分裂或它所在列会被单独...原创 2019-11-05 18:35:26 · 125 阅读 · 0 评论 -
【校内模拟】背包问题(带限制二维偏序的LIS)(线段树)
请确认你要搜索的关键词不是DP里面的背包问题而是一道叫做“背包问题”的数据结构题再来看。简要题意:你有mmm个背包容量为tit_iti,你有nnn个物品,重量为WiW_iWi,权值为ViV_iVi。请你求出满足如下限制的最长的物品序列ppp,假设长度为lenlenlen。对于∀1≤i<len\forall 1\leq i < len∀1≤i<len,Wpi≤Wpi...原创 2019-11-02 16:35:34 · 206 阅读 · 0 评论 -
【校内模拟】层层回忆(线段树合并)
简要题意:给你一棵有根树,每个点uuu有正数权值aua_uau,定义一个点uuu的权值fuf_ufu为其子树中点的aaa之和。对于两个点u,vu,vu,v,我们称uuu能到达vvv当且仅当fuf_ufu与该路径上fff的最大值和最小值都不相等。对于每个点uuu,请你求出所有它能达到的所有点的fff值按位或的结果。题解:如果是异或可能会好做一点。由于是按位或而不是异或,没有逆运算,...原创 2019-11-01 16:24:08 · 226 阅读 · 0 评论 -
【校内模拟】光线追踪(线段树)(离散化)
简要题意:平面上第一象限内扔矩形,询问一条从原点射出的直线第一次碰撞的矩形是哪个。题解:显然矩形只有左下的两条线段有用。拆开,分别维护,做两次线段树,对于压在坐标轴上的询问特殊处理。反正考场上写了一个多小时,感觉细节有点多,但是下来发现好像不是很多因为一些莫名其妙的原因爆炸了写了一大堆lower_bound跑得贼慢。代码:#include<bits/stdc++.h>...原创 2019-10-29 14:37:28 · 183 阅读 · 0 评论 -
【BJOI2019】删数(贪心)(线段树)
传送门题解:话说 BJOI2019 Day2 稍微难点的就这一道啊,而且这道题也不算特别难的。那BJ今年省选Day1爆炸的岂不是翻盘无望首先考虑一个正确性显然的贪心。我们把所有数放到数轴上,重复的叠起来,然后把[1,n][1,n][1,n]中的柱子(宽度忽略不计)向左边推倒。没有覆盖的位置总数就是答案。于是我们维护一个全局位移标记,线段树维护每个点覆盖次数,区间000的个数。修改就很好处理了。...原创 2019-10-21 16:54:15 · 184 阅读 · 0 评论 -
【GXOI/GZOI2019】特技飞行(扫描线)(线段树)(曼哈顿距离转切比雪夫距离)
传送门感觉是一道和计算几何没有什么关系的计算几何题解:容易注意到其实题目分为完全不相干的两个部分。首先是算ccc的出现次数,然后是计算最多和最少能够出现多少个aaa。交换的最多次数其实就是交点个数,因为交点个数就是逆序对个数。或者可以感性理解一下,如果在每个相交的地方都交换方向,显然全程所有飞机的相对顺序都不会改变,最后结果就一定符合要求。根据一点群论知识知道把最终排列结果看作是一...原创 2019-10-16 14:17:33 · 213 阅读 · 0 评论 -
【LOJ576】「LibreOJ NOI Round #2」签到游戏(最小生成树)(线段树)
传送门题解:首先这是一个非常常见以及SB的生成树模型。我们把一个端点固定的边的代价函数拎出来看一看。发现是从中间向两边单调不增,显然是gcd的性质。那么很显然地,只会有两种边(1,i),(i,n)(1,i),(i,n)(1,i),(i,n)。再想一想发现这两种边的代价函数一定在中间会交起来,最小生成树一定存在一个ppp,使得所有边都是[1,i](i>p),[i,n](i≤p),[...原创 2019-10-14 10:43:01 · 364 阅读 · 0 评论 -
2018.08.30【校内模拟】T3 图论题 (dfs序)(线段树)
【描述】 给你一个图,一共有 N 个点,2*N-2 条有向边。 边目录按两部分给出 1. 开始的 n-1 条边描述了一颗以 1 号点为根的生成树,即每个点都可以由 1 号点到达。 2. 接下来的 N-1 条边,一定是从 i 到 1(2&amp;amp;amp;lt;=i&amp;amp;amp;lt;=N)的有向边,保证每个点都能到1 有q 次询问: 1 x w :表示将第 x 条边的边权修改为w...原创 2018-08-30 14:52:12 · 215 阅读 · 0 评论 -
2018.09.15【codevs2492】上帝造题的七分钟2(并查集)(树状数组)(线段树)
传送门解析:这里的并查集并不能用集合合并的思想来考虑,这里并查集有点像图论中的DAGDAGDAG里的边,记录的是当前节点的下一个(包括当前)非1节点的位置。显然,对1开方对答案是没有任何影响的。那么我们就只对非1的开方。那么我们就只遍历非1的节点。修改和查询用树状数组就好了。一个数最多被开方log log arrilog log...原创 2018-09-15 14:36:57 · 239 阅读 · 0 评论 -
2018.09.26【洛谷P4513】小白逛公园(线段树)
传送门解析:又是一道区间操作题。思路:相信大家都会最大连续子段和。不会没关系,反正这道题不用。。。相信最困扰的就是如何处理出当前区间的答案以及如何合并区间了。首先,对于叶子节点,答案就是该叶子的权值。那么对于非叶节点呢?怎么从它的两个儿子转移过来。对于一个非叶节点,它的答案与它儿子的关系只有如下几种。1.它的最大连续子段和全部在左儿子。2.它的最大连续子段和全部在右儿子。...原创 2018-09-26 14:05:22 · 170 阅读 · 0 评论 -
【模板】主席树
参考题目:静态区间第k大解析:好早之前就写过的板子了,转成指针之后再来写一次。代码:#include&lt;bits/stdc++.h&gt;using namespace std;#define ll long long#define re register#define gc getchar#define pc putchar#define cs constinli...原创 2018-09-27 18:35:52 · 108 阅读 · 0 评论 -
2018.10.08【AHOI2009】【洛谷P2023】【BZOJ1798】维护序列(线段树)
洛谷传送门BZOJ传送门解析:由于乘法的优先级大于加法,我们考虑以乘法为主维护(就是尽量不去动乘法的延迟标记)。维护方式如下:1.遇到加法,直接加在加法标记上,并更新当前数列的和。2.遇到乘法,同时更新乘法标记,加法标记,当前序列和。3.下传标记时,先传乘法,再传加法。代码:#include<bits/stdc++.h>using namespace std;...原创 2018-10-08 19:14:26 · 114 阅读 · 0 评论 -
2018.09.30【ZJOI2008】【BZOJ1036】【洛谷P2590】树的统计(树链剖分)(线段树)
BZOJ传送门洛谷传送门解析:好久没写过这么长的题了。。。(虽然说本来可以几个函数封装在一起的)这大概是我碰树链剖分的第一道题吧,上一次写这道题是很久之前了,现在开了博客再写一遍。深刻理解树链剖分后再回头看,发现这真是一道简单的好题。想写长链剖分的童鞋请自重,毕竟那复杂度是要看运气的。这道题一般的做法是轻重链剖分加线段树。(当然还有树分块) 树分块的题解我会在以后更新,复杂度没有轻...原创 2018-09-30 17:56:45 · 135 阅读 · 0 评论 -
2018.10.16【校内模拟】长者(主席树)(字符串哈希)
解析:其实题目已经提示了我们需要用什么数据结构没睡醒的zxyoizxyoizxyoi考场上打了30pts30pts30pts暴力就直接滚粗了。。。一听是正解主席树瞬间明白怎么做。。。由于每次修改只有一个字符,所以我们用主席树维护当前字符串的前缀hashhashhash。每次比较两个字符串的时候直接用hashhashhash找到第一个不相同的位置,然后比较这个位置就可以得到字典序了。单次比较...原创 2018-10-16 15:43:07 · 164 阅读 · 0 评论 -
2018.10.22【COGS2632】数列操作d(线段树)
传送门解析:在经历了奋斗一上午发现模数取错的尴尬之后,zxyoi终于AC了这道题。思路:简化题意就是线段树区间加等差数列,询问区间和。换句话说就是区间加了一个一次函数。我们转换一下就发现一次函数是可以轻松合并的,所以我们转化成一个只与位置有关的一次函数,使他满足加法合并的性质。然后更新就是直接一次函数各项加法,等差数列求和公式更新区间和代码:#include&lt;bits/...原创 2018-10-22 17:08:36 · 219 阅读 · 0 评论 -
2018.10.22【HDU5828】Rikka with Sequence(线段树)
传送门解析:线段树维护区间加,区间开方,询问区间和。思路:其实先去把这道题写了再回来看这道题效果会好一点。首先,区间不断开方会逐渐把区间的极差减小,显然。那么如果没有区间加的操作,我们只会开方log2 (log2n)log_2\text{ }(log_2n)log2 (log2n)次就会把所有数全部变成1,加上这个操作后,我们只能通过极差来判断是否调整。维护...原创 2018-10-22 19:12:46 · 112 阅读 · 0 评论 -
2018.10.22【TJOI2018】【洛谷P4588】【BZOJ5334】数学计算(线段树)
洛谷传送门BZOJ传送门解析:首先想到的是逆元,然而题目并没有说modmodmod是质数。那么怎么办?好像是O(nlogn)O(nlogn)O(nlogn)复杂度的数据范围。而且每个111操作只会被撤销一次。。线段树!线段树每次1操作就修改对应叶子节点的值,同时节点维护区间乘积%mod\%mod%mod的结果。而2操作就把对应的操作1的叶子节点的权值改成1就行了,同时2操作不动自己...原创 2018-10-22 19:35:36 · 140 阅读 · 0 评论 -
2018.10.22【COGS2633】数列操作e(线段树)
传送门解析:输出又一次阻挡了我一A的步伐。。。思路:线段树维护区间加二次函数,区间求和。题目中要求的加操作是在第iii个位置加上(i−l+1)2×v(i-l+1)^2\times v(i−l+1)2×v,显然我们需要展开成二次函数一般形式,这样才能够令它满足加法性质,便于合并标记。展开后以iii为主元就是i2∗v+i∗(2∗v∗(1−pos))+(pos−1)2∗vi^2*v+i*(...原创 2018-10-22 21:27:21 · 163 阅读 · 0 评论 -
2018.10.22【NOIP练习】数据结构题(线段树)
传送门解析:码农题,直接按照覆盖,翻转,加法的优先级来维护标记,下传的时候也是按照这个优先级。注意不要吝惜常数,该取模的地方一定要取模,不然调半天都不知道原因就真的尴尬了。(比如我)代码:#include&lt;bits/stdc++.h&gt;using namespace std;#define ll long long#define re register#define...原创 2018-10-22 23:25:44 · 187 阅读 · 0 评论 -
2018.10.25【NOIP练习】ZUA球困难综合征/记忆(线段树)(数位DP)(位运算骚操作)(按位贪心)
传送门(由于现在OJ上有两道重名的题,所以请先确认你要找的题解是不是这道题的)解析:这道题有两种做法,二元组维护信息+二进制数位DP,三元组维护信息+按位贪心。(其实二元组也可以按位贪心,三元组也可以数位DP。。。)好写的二元组需要卡常才能过,因为数位DP还是太慢了。。。解法1:二元组+数位DP我们在线段树节点维护一个二元组(v0,v1)(v_0,v_1)(v0,v1)表示每一位...原创 2018-10-25 16:22:13 · 457 阅读 · 0 评论 -
2018.10.25【NOIP练习】ZUA球困难综合征(线段树)(CRT)
传送门解析:首先,这天坑的出题人。。。思路肯定是线段树维护区间运算结果,但是两万多的模数怎么维护?这奇怪的光速。。。光速不是299792458m/s299792458m/s299792458m/s吗?怎么会变成293932939329393?是的模数是这道题解决的关键,因为29393=7×13×17×1929393=7\times 13\times 17\times 1929393=7...原创 2018-10-25 20:07:53 · 258 阅读 · 0 评论 -
2018.10.26【校内模拟】图(点分治(被卡常))(权值线段树合并(完爆标算))
传送门解析:考场上写完T1T1T1后,本来说睡一会起来写T2T2T2,结果刚趴下五分钟就想出了点分治写法,一发过了大样例。结果最后卡常只剩80分。。。结果标程是KruskalKruskalKruskal重构树上离线树状数组。。。O(nlog2n)O(nlog^2n)O(nlog2n),我的点分治明明也是O(nlog2n)O(nlog^2n)O(nlog2n)。。。可怕的是标程在OJ上直接...原创 2018-10-26 22:38:49 · 213 阅读 · 2 评论 -
2018.11.01【NOIP训练】图论(树上倍增)(线段树)(DFS序)(离线处理)
传送门解析:有一道差不多。但是我用了在线算法做的题:链接这里用一种好想的多的离线算法来做这道题。思路:其实还是断边,将一个询问变成两个来做显然需要断的是两个点路径中点。然后将询问分为两类处理,root=u,ban=vroot=u,ban=vroot=u,ban=v,uuu在vvv的子树中或不在vvv的子树中,其实就算v==lcav==lcav==lca,我们还是可以这样做,但是需要修...原创 2018-11-01 19:17:13 · 205 阅读 · 0 评论 -
2018.11.07【CQOI2011】【BZOJ3295】【洛谷P3157】动态逆序对(树状数组套动态开点线段树)
BZOJ传送门洛谷传送门解析:首先我们可以通过一个线段树求出逆序对个数,然后就是乱搞的时间了。显然每次删除一个数,需要我们查询前面比他大的数的个数和后面比他小的数的个数,这个就是裸的树套树了。这道题可以用树状数组套线段树动态开点。代码:#include<bits/stdc++.h>using namespace std;#define ll long long#d...原创 2018-11-07 21:13:28 · 135 阅读 · 0 评论 -
2019.01.04【清华集训2013】【BZOJ2962】【洛谷P4247】序列操作(线段树)
BZOJ传送门洛谷传送门解析:这道题请认真读题啊。。。所有的询问c≤20c \leq 20c≤20啊。。。不要题没读完就放弃了啊。思路:由于时限有6s代码:#include&lt;bits/stdc++.h&gt;using namespace std;#define ll long long#define re register#define gc get_char...原创 2019-01-04 15:24:50 · 233 阅读 · 0 评论 -
2019.01.19【雅礼集训2019Day2T1】two(DFS序)(线段树)
描述你有两棵有根树,每棵各有 nnn 个顶点。让我们用整数 1 到 nnn 给每棵树的顶点编号。两棵树的根都是顶点 1。第一棵树的边都都是蓝色,第二棵树的边都是红色。简明起见,我们称第一棵树是蓝色的,以及第二棵树是红色的。当满足下面的两个条件下, 我们认为边(x,y)(x, y)(x,y) 有害于边(p,q)(p,q)(p,q):1.边(x,y)(x,y)(x,y)的颜色不同于边(p,q)...原创 2019-01-19 13:57:41 · 388 阅读 · 0 评论 -
2019.01.20【TJOI2015】【BZOJ3999】【洛谷P3976】旅游(树链剖分)(线段树)
BZOJ传送门洛谷传送门解析:这个LCT和链剖都能做的,不过链剖空间常数大,而LCT空间常数小而时间常数大。思路:考虑重链剖分,DFSDFSDFS优先重儿子构造出DFS序,建立线段树,同时维护由DFS序大的向DFS序小的走的答案,和DFS序小的向DFS序大的走的答案。还要维护最大值和最小值。剩下的就是无脑跳轻重链了。代码:#include<bits/stdc++.h>...原创 2019-01-20 14:29:02 · 210 阅读 · 0 评论 -
2018.01.15【NOIP训练】节目(支配树)(主席树优化建图)
传送门解析:首先这个是一个连通性问题,显然考虑建图。然后这个限制是形如区间的形式,考虑线段树优化建图。然而这个限制略显窒息,因为有两维啊,一维时间一维权值,考虑以时间为根,权值为关键字建主席树。由于是前面的可以通向后面,考虑从后往前可持久化,对应节点从前往后连有向边。显然这样子建出来的图的连通性和原图是相同的。然后这个询问,显然就是支配树路径上实节点的个数啊。求出支配树后从111...原创 2019-01-15 21:40:23 · 748 阅读 · 0 评论 -
2019.01.23【BZOJ4644】经典傻逼题(线段树分治)(线性基)
DarkBZOJ传送门解析:没有注意到会先输入一个测试点编号WA了好几发。。。其实还是挺好想的。思路:首先注意到异或的性质,也就是自反性。考虑一条边的答案什么时候会被算到。就是我们选出的点集只包含了它的一个端点。没选的时候不算,选两个的时候也不算。很显然我们只需要维护每个点的点权为所有它上面的边的边权异或和就行了。那么我们要做的就是每次选择一个点集,使得这个点集的异或和最大。...原创 2019-01-23 10:37:59 · 313 阅读 · 0 评论 -
【BZOJ5480】路径的条数(DFS序)(线段树维护扫描线)
传送门解析:考虑统计不合法的路径条数。令in[u]in[u]in[u]表示dfsdfsdfs序中,uuu的进入时间戳,out[u]out[u]out[u]表示退出时间戳。一个方案可以表示为点集的笛卡尔积,由于是无向的,所以我们只考虑in[u]&amp;lt;in[v]in[u] &amp;lt; in[v]in[u]&lt;in[v]的路径。一个限制可以表示为(a,ka)(a,ka)(...原创 2019-04-05 23:24:38 · 199 阅读 · 0 评论 -
2019.02.27【SCOI2018】Pipi 酱的日常(线段树)(有事没事循环展开)
描述给定 n 个数,第 i(1<=i<=n)个位置上的值为xi,有 m 个操作分为两种操作:将 x 数组位置 pos 上的数字改为 v如果选择 x 数组[L,R]中的某连续三个数加 u,新得到的数组称为 y,求所有 可能形成的 y 数组的各元素绝对值之和的最大值(操作 2 不会改变 x 数组)。输入第一行输入 n 和 m,接下来一行,有 n 个数表示 x 数组;接下来 m 行...原创 2019-02-27 20:01:27 · 510 阅读 · 0 评论