线段树
2
Libra_Glow
不学dp是没有前途的(逃
展开
-
牛客 Laptop 二维偏序
link也是一个裸的二维偏序,但是要求有多少个被完虐,那么只需要把 x 和 y 反着排序就好啦。//#pragma GCC optimize(2)#include<cstdio>#include<iostream>#include<string>#include<cstring>#include<map>#include<cmath>#include<cctype>#include<vector&原创 2020-11-30 16:11:59 · 226 阅读 · 2 评论 -
CF1311F Moving Points 二维偏序
link题意比较简单,容易提取出来对于 j<ij<ij<i 并且 xj<xix_j<x_ixj<xi 如果 vj<=viv_j<=v_ivj<=vi 的话,那么他们最小距离即为初始距离之差,否则最小距离为0。这容易启发我们用二维偏序来做:以 x 为横坐标, v 为纵坐标。按照 v 从小到大的顺序添加 x , 每次用树状数组求一下贡献就好啦。因为要求距离,所以我们维护一个统计数量的树状数组和一个统计距离的树状数组即可。//#pragma原创 2020-11-30 15:44:43 · 147 阅读 · 0 评论 -
CodeForces - 487B Strip dp + 线段树
link题意:给定序列n,让你尽可能少的分成几段,每段都需要满足以下要求:(1) 每段长度必须 >= l(2) 每段 最大值 - 最小值 <= s看出来是dp后,转移方程也比较明显了dp[i]=Min(dp[i],dp[j]+1)dp[i]=Min(dp[i],dp[j]+1)dp[i]=Min(dp[i],dp[j]+1)其中 [j+1,i][j+1,i][j+1,i]这段区间必须是合法的,直接转移的话是O(N2)O(N^2)O(N2)的复杂度。考虑优化,可以发现我们要求的 j原创 2020-11-26 10:32:55 · 159 阅读 · 3 评论 -
E. Greedy Shopping 线段树
link比较裸的线段树了吧,不过没写出来还是有点思路不清楚,对线段树理解还是不够。对于操作1,可以看成区间覆盖,维护一个区间最大值和最小值,最小值用来剪枝,让后大于最大值的时候覆盖掉即可。对于操作2,当当前区间sum<=x的时候,说明可以直接减去。否则的话先递归左区间,让后递归右区间,依次处理即可。实现起来就so easy了。//#pragma GCC optimize(2)#include<cstdio>#include<iostream>#include&l原创 2020-11-18 14:23:43 · 1774 阅读 · 10 评论 -
李超线段树
模板题大佬博客#pragma GCC optimize(2)#include<cstdio>#include<iostream>#include<string>#include<cstring>#include<map>#include<cmath>#include<cctype>#include<vector>#include<set>#include<queue>原创 2020-09-05 16:23:34 · 133 阅读 · 0 评论 -
线段树 标记永久化
永久化标记就是不需要下传lazy标记,修改的时候一路更改要改的点,询问的时候累加标记即可。这里以区间赋值为例,注意modify的时候不需要pushup。#pragma GCC optimize(2)#include<cstdio>#include<iostream>#include<string>#include<cstring>#include<map>#include<cmath>#include<cctyp原创 2020-09-05 14:59:41 · 288 阅读 · 0 评论 -
Educational Codeforces Round 36 (Rated for Div. 2) E 线段树 || 珂朵莉树
传送门尘封多个月的题。。。以前看见要动态开点没学,拿线段树敲崩了,秃然想起来就补上了。题意就是比较简单,给定一个全1序列,给你若干区间,两个操作,每次操作后区间 1 ~ n 1的个数。:(1)把区间全改成0(2)把区间全改成1算比较简单的区间修改吧,不过这个 n 范围是 1e9 需要离散化一下,离散化之后用线段树每个点维护一个区间,不过注意要把r加一,因为如果 l == r 可能 find 之后 l > r ,而且区间也不好维护。所以加一就比较舒服了。还要注意加上询问没涉及的区间长度。让原创 2020-08-30 21:17:36 · 131 阅读 · 0 评论 -
Vases and Flowers HDU - 4614 线段树 + 二分
传送门题意:编号为 0 ~ n - 1 个花瓶,有两个操作(1)以 a 为起点,选择之后的 k 个花瓶放上花,输出左右端点。(2)清空 l ~ r 的所有花瓶中的花,输出清除的花数量对于第二个操作就是线段树区间赋值和区间查询了。第一个操作如果知道左右端点直接区间赋值即可。现在问题是怎么求左右端点。比较显然可以在线段树上进行二分,分别二分出来第一个数位置和最后一个数位置。如果填不满k个的话显然第二个答案是INF,不会被更新。那么就需要把k改成 l ~ n - 1 中空花瓶个数,再二分一次就行了。#原创 2020-08-30 09:37:12 · 262 阅读 · 0 评论 -
P4513 小白逛公园 线段树
传送门动态维护区间最大子段和比较简单的一个题吧,复习一下。让后就是注意读题,存在 x > y 情况。。不判断后面点全部re渍渍渍,痛击不读题的小菜鸡。。之前石油大还做过一个直接题目不给,让后数据存在 x > y 的情况,真是毒瘤了。#include<cstdio>#include<iostream>#include<string>#include<cstring>#include<map>#include<cma原创 2020-08-28 21:16:06 · 139 阅读 · 0 评论 -
P2824 排序 线段树 + 二分
传送门比较有意思的一个题。直接排序肯定是不可以的。那看最后询问,只是一个位置,那说明是一个确定的值 x 。可以考虑讲原序列转换成01序列,>= x 的为1 ,< x 的为0,用线段树维护区间内1的值。那么排序的操作即可转换成对区间内01两个数的操作。假如当前区间为 [ l , r ] ,1 的个数为 cnt 。如果要升序的话,只需要 modify(1,r,r-cnt+1,1) 和 modify(1,l,r-cnt,0) 即可 ,也就是把 [ r , r - cnt + 1 ] 改成 1 ,原创 2020-08-28 00:10:51 · 170 阅读 · 2 评论 -
Reverse and Swap CodeForces - 1401 F 线段树 + 思维
传送门题目:要求实现四个操作如下第一个第四个用线段树比较容易了。第二个和第三个都是在分成 2 ^ k 长度区间操作,比较容易想到线段树就是分成 n+1 层,每层都由 2 ^ k 长度区间构成。规定根节点为第 n 层,叶子节点为第 0 层。先看第三个swap:相当于交换线段树两个相邻区间,也就是相当于访问的时候直接访问另一个区间即可。可以用一个变量来记录以下是否需要改变访问的左右结点。比如当前swap的是第 k 层 ,那么只需要改变第 k + 1 层标记即可。第二个跟第三个道理相同,假如当前需要r原创 2020-08-26 15:34:01 · 323 阅读 · 0 评论 -
hdu 3333 Turing Tree 线段树 + 离线
题目链接题目给定一个序列,让后查询m个区间,输出区间内数的和,重复的不计算多次。想了半天也没想出来怎么在线维护这样的线段树,那就考虑一下离线怎么做。如果把区间按右端点排序,那么每次查询 [ l , r ] 的时候,如果都能保证 [ 1 , r ] 内重复数字的下标都在最右边,那这样即可避免重复了,而且还能保证每次查询的准确性。也就是说每次询问,看一下 [ 1 , r ] 是否已经确定,如果还没确定的话就需要遍历到 r ,这样就保证了每次 [ 1 , r ] 区间内没有重复的数字,且下标都只保留最右边。原创 2020-06-30 10:00:30 · 174 阅读 · 0 评论 -
P4198 楼房重建 线段树 + 单调栈
传送门题面有点小问题,个人感觉应该是存在一个点不相交即可。改成存在的话,理解起来就比较简单了,就是维护每个点到 (0,0) 的斜率,从前往后做一遍单调递增栈得到的单调栈长度即为答案。不过显然需要数据结构来维护,可以考虑线段树。修改操作的两个区间合并的时候,并不能直接合并,需要发现一些潜在的性质。(1) 左区间的第一个点一定是要选的(2) 左区间的最大值一定要选知道这两点之后,那么答案就是 len( L ) + cal ( R , max_len( L ) ),cal是找右区间大于左区间最大值的单原创 2020-06-27 11:38:06 · 162 阅读 · 0 评论 -
P4315 月下“毛景树” 树剖边权转点权
题目链接学了下边权转点权,做了下这个马虎一丢丢就一个测试点过不去的题。边权转点权的时候,只需要把边权对应到更深的那个点即可。更新操作的最后一步,也就是在他们都在一条链的时候,需要减去他们的 lca ,因为 lca 表示的边权不在两点之间。操作很容易,码量实在有点多了,细节也比较多。因为要实现区间赋值和区间加值,那么对于两种的lazy来说,赋值的lazy需要设为 -1 ,加值的 lazy 需要设为 0 。而且在pushdown的时候,需要先看看有没有赋值,有的话需要把该节点的 加值的lazy 赋值原创 2020-06-18 15:43:19 · 265 阅读 · 0 评论 -
牛客 Yet Another Bracket Sequence 线段树
题目链接题意:给定括号序列,让后m次修改,对于每次修改回答括号序列是否合法。可以先想想暴力怎么搞,从头枚举,记一个cnt,碰到 ( 就 cnt++ ,碰到 ) 就cnt-- ,如果碰到cnt < 0 的情况,或者最后 cnt != 0,即为不合法。照这个过程,用线段树来模拟一下就行了,发现每次 cnt-- 的时候,意为 ) 抵消掉了 ( ,那么线段树 pushup 的时候,左端区间的 ( 可以和右边区间的 ) 抵消,左端区间的 ) 和右端区间的 ( 都不能被抵消,那么直接加上即可,最后根节点的原创 2020-06-03 19:02:58 · 273 阅读 · 0 评论 -
树链板子
解决的问题:(1)从 x 到 y 最短路径上的结点值 + z(2)求从 x 到 y 最短路径的结点值之和(3)以 x 为根节点的子树,结点值 + z(4)求以 x 为根节点的子树内,所有节点值之和重儿子:对于非叶子结点的所有儿子,以该儿子为根的子树中包含节点数最多的儿子。轻儿子:对于非叶子结点的所有儿子,非重儿子即为轻儿子。重边:一个父亲连接他的重儿子的边即为重边。轻边:一个父亲连接他轻儿子的边即为轻边。重链:由多条重边连接形成的路径。轻链:由多条轻边连接形成的路径。做两遍dfs预处理原创 2020-05-31 12:11:40 · 142 阅读 · 0 评论 -
P2184 贪婪大陆 线段树 + 区间覆盖
题目链接题意:每次给定一个区间,有两个操作(1)区间炸弹的种类数 + 1(2)查询区间的不同炸弹种类数仔细想想可以想到,可以转换成求一个区间内不同区间覆盖的最大次数,以前做过很多类似的题,大体思想就是把 l 的位置 + 1 ,r + 1 的位置 - 1 ,这个题也是类似,用线段树维护区间左端起点的值和右端起点的值,对于每次添加的区间,l 和 r 的位置都 + 1 。每次查询的区间,用 lsum ( 1 ~ r ) - rsum ( 1 ~ ( l -1 ) ) ,也就是起点减去终点,就可以得到区间内原创 2020-05-23 18:38:24 · 169 阅读 · 0 评论 -
加法 线段树 + 思维
加法时间限制: 8 Sec 内存限制: 128 MB[提交] [状态]题目描述菜鸡Resee在学加法竖式具体的,她可能会对{A1,A2,…,Ak}k个数做加法,得到一个和s如果一次计算中s的每一位都在相加的那些数中对应的位置出现过,那么她认为这次计算是快乐的,不然就是不快乐的。例子如下图:左边的计算是快乐的。右边的是不快乐的,因为s的十位是3,而没有一个数的十位是3现在Resee的练习本上写了一排n个数。每次她会被要求在第L到第R个数中选一些数相加她想知道存不存在方案使这一次计算是不快原创 2020-05-14 00:34:49 · 206 阅读 · 0 评论 -
upc 最⼤⼦段和 线段树 + 懒标
最⼤⼦段和时间限制: 1 Sec 内存限制: 128 MB题目描述现在给你⼀个序列a1…an,求⼀个权值和最⼤的区间(区间可以为空),其中相同的数只算⼀次。输入第⼀⾏⼀个正整数n,接下来⼀⾏n个整数,a1到an。输出⼀⾏⼀个整数表⽰答案。样例输入 Copy【样例1】51 -3 2 2 -4【样例2】54 -2 0 -2 3样例输出 Copy【样例1】2【样例2】5提示对于100%的数据,n≤200000,|ai|≤108师傅巨巨给的思路,orz。考虑用线段树原创 2020-05-12 20:17:31 · 224 阅读 · 0 评论 -
upc 卡德加的兔子 线段树 + 矩阵快速幂
问题 C: 卡德加的兔子时间限制: 5 Sec 内存限制: 128 MB[提交] [状态]题目描述卡德加喜欢养兔⼦。他在达拉然的下⽔道⾥放了N个兔笼(编号1到N),⾥⾯养着他从德拉诺带来的兔⼦。它们的繁殖遵循斐波那契数列的规律:刚开始时,笼⼦⾥有⼀对刚出⽣的兔⼦。每对兔⼦在出⽣第⼆个⽉后,每个⽉都⽣⼀对兔⼦。(第⼀个⽉结束后有1对兔⼦。第⼆个⽉结束后有2对。)卡德加从苏拉玛的⼤魔导⼠艾...原创 2020-05-04 21:59:24 · 322 阅读 · 0 评论 -
洛谷 花神游历各国2 线段树
上帝造题的七分钟2 / 花神游历各国题目描述"第一分钟,X说,要有数列,于是便给定了一个正整数数列。第二分钟,L说,要能修改,于是便有了对一段数中每个数都开平方(下取整)的操作。第三分钟,k说,要能查询,于是便有了求一段数的和的操作。第四分钟,彩虹喵说,要是noip难度,于是便有了数据范围。第五分钟,诗人说,要有韵律,于是便有了时间限制和内存限制。第六分钟,和雪说,要省点事,于是便有...原创 2020-05-04 17:55:29 · 214 阅读 · 0 评论 -
upc 生命曲线 线段树+lazy
生命曲线时间限制: 2 Sec 内存限制: 128 MB题目描述Mr.L最近得了妄想症,他对自己生命的历史和未来产生了一些幻觉。他的眼前浮现出了自己的生命价值曲线。这条生命线不断地变化,使他不断怀疑着自己存在的意义……Mr.L的生命价值曲线可以被简化为一个代表着Mr.L的每个阶段的生命价值的序列。其中第i个阶段的生命价值为vi。当他预感自己成功或失败时,他的生命线上会递增或递减地增加...原创 2020-04-16 23:17:40 · 342 阅读 · 0 评论