随笔分类 -  线段树教做人系列

摘要:题意:给你一个字符串,有两种操作:1:把某个位置的字符改变。2:询问l到r的子串最少需要删除多少个字符,使得这个子串含有2017子序列,并且没有2016子序列? 思路:线段树上DP,我们设状态0, 1, 2, 3, 4分别为: null, 2, 20, 201, 2017的最小花费,我们用线段树来维 阅读全文
posted @ 2019-09-08 20:42 维和战艇机 阅读(454) 评论(0) 推荐(0)
摘要:题意:有一个n * 2的网格图,有3种操作:给两个相邻的点加上一条边,断开相邻的两个点连着的边,询问两个点的连通性。 思路:直接看博客就行了,https://blog.csdn.net/roll_keyboard/article/details/81185535,在纸上画一画来确定4个顶点之间的更新 阅读全文
posted @ 2019-09-02 12:58 维和战艇机 阅读(170) 评论(0) 推荐(0)
摘要:题意及思路:https://blog.csdn.net/u013534123/article/details/89010251 之前cf有一个和这个相似的题,不过那个题只有合并操作,没有删除操作,直接并查集搞一搞就行了。对于这个题,因为有删除操作,我们对操作序列建一颗线段树,记录每个操作影响的区间操 阅读全文
posted @ 2019-06-15 12:04 维和战艇机 阅读(286) 评论(0) 推荐(0)
摘要:题意:有一个二维平面,以及n个操作,每个操作会选择一个矩形,使得这个二维平面的一部分被覆盖。现在你可以取消其中的2个操作,问最少有多少块地方会被覆盖? 思路:官方题解简洁明了,就不细说了:https://codeforces.com/blog/entry/63729。 此处重点记录一下两种做法的巧妙 阅读全文
posted @ 2019-06-14 22:23 维和战艇机 阅读(283) 评论(0) 推荐(0)
摘要:题意:给你一颗以点1为根的数,有两种操作,一种是把x及其子树的所有点都灌满水,一种是把x及其所有祖先都放空水,一种是询问,问某个点里有没有水? 思路:看网上大多数是树剖,但实际上5e5的数据树剖还是有点慌的。。。我只用了线段树。我们发现,只要一个点被清空之后,如果没有灌水,那么这个点将一直是空的。同 阅读全文
posted @ 2019-05-30 23:48 维和战艇机 阅读(356) 评论(0) 推荐(0)
摘要:题意:给你一个括号序列,这个括号序列将确定一颗二叉树。有q次询问,每次询问输出这颗树的直径。 思路:https://blog.csdn.net/Huah_2018/article/details/89788074 代码: 阅读全文
posted @ 2019-05-24 21:41 维和战艇机 阅读(355) 评论(0) 推荐(0)
摘要:思路及博客:https://www.cnblogs.com/uid001/p/10507346.html 代码: 阅读全文
posted @ 2019-04-13 19:35 维和战艇机 阅读(211) 评论(0) 推荐(0)
摘要:题意及思路:https://www.cnblogs.com/TinyWong/p/10400682.html 代码: 阅读全文
posted @ 2019-04-13 10:56 维和战艇机 阅读(258) 评论(0) 推荐(0)
摘要:题面及大致思路:https://www.cnblogs.com/Yangrui-Blog/p/9623294.html, https://www.cnblogs.com/New-Godess/p/4567282.html 每个点维护2个矩阵,一共15个变量。矩阵a: [a(i - 1), a(i), 阅读全文
posted @ 2019-03-31 00:10 维和战艇机 阅读(433) 评论(0) 推荐(1)
摘要:题面简洁明了,一看就懂 做了这个题之后,才知道怎么用线段树维护递推式。递推式的递推过程可以看作两个矩阵相乘,假设矩阵A是初始值矩阵,矩阵B是变换矩阵,求第n项相当于把矩阵B乘了n - 1次。 那么我们线段树中每个点维护把矩阵B乘了多少次,懒标记下放的时候用快速幂维护sum。 阅读全文
posted @ 2019-03-27 16:25 维和战艇机 阅读(297) 评论(0) 推荐(0)
摘要:博客:http://www.cnblogs.com/mangoyang/p/9979465.html 李超线段树支持两种操作:1:插入一条直线。2:询问在x = c与这些直线的交点中最大的y坐标。 插入的时候,如果有交点,本层节点留下来的是优势直线,劣势的那条去递归比较。优势直线是指在这个区间中覆盖 阅读全文
posted @ 2019-03-25 18:37 维和战艇机 阅读(163) 评论(0) 推荐(0)
摘要:题意及思路 这个题加深了我对主席树的理解,是个好题。每次更新某个点的距离时,是以之前对这个点的插入操作形成的线段树为基础,在O(logn)的时间中造出了一颗新的线段树,相比直接创建n颗线段树更省时间。比较的时候二分比较,为了加快比较给每个点设置一个hash值。 代码: 阅读全文
posted @ 2019-03-20 19:14 维和战艇机 阅读(284) 评论(0) 推荐(0)
摘要:题意及思路看这篇博客就行了,讲得很详细。 下面是我自己的理解: 如果只有2,没有3的话,做法就很简单了,只需要对数组排个序,然后从小到大枚举最大的那个数。那么它对答案的贡献为(假设这个数排序后的位置是pos)2 ^ (pos - 1) * 2 ^ a[pos]。意思是a[pos]这个数必选,其它比它 阅读全文
posted @ 2019-03-18 10:30 维和战艇机 阅读(230) 评论(0) 推荐(0)
摘要:题意:给你一个数组a,长度为。有两种操作。一种是改变数组的某个元素的值,一种是满足某种条件的数组b有多少种。条件是:b[i] <= a[i],并且b[1]^b[2]...^b[n] = k的数组有多少种。数组a的元素都小于1000. 思路:因为数很小,我们把数变成二进制数,然后拆分二进制数。比如11 阅读全文
posted @ 2019-03-14 23:26 维和战艇机 阅读(189) 评论(0) 推荐(0)
摘要:题意:有一个数组a和一个数组k,数组a一直保持一个性质:a[i + 1] >= a[i] + k[i]。有两种操作:1,给某个元素加上x,但是加上之后要保持数组a的性质。比如a[i]加上x之后,a[i + 1]<a[i] + k[i],那么a[i + 1]就变成a[i] + k[i],否则不变。同理 阅读全文
posted @ 2019-03-13 23:49 维和战艇机 阅读(718) 评论(0) 推荐(1)
摘要:题意:给你n组操作,分别为压栈,出栈,询问栈顶元素。每一组操作有一个时间戳,每次询问栈顶的元素的操作询问的是在他之前出现的操作,而且时间戳小于它的情况。题目中不会出现栈为空而且出栈的情况。 例如: push 100 1 peak 6 push 200 5 询问的结果是100。 思路:先把时间戳离散化 阅读全文
posted @ 2019-03-11 15:18 维和战艇机 阅读(205) 评论(0) 推荐(0)
摘要:在杜教直播中得知2018多校第八场第10题和这个题很相近,所以先补这个题。 代码和思路借鉴了这篇博客:http://hzwer.com/6746.html。 这题是询问从原点能看到的楼房数目,首先对某一个点修改后,对之前的点没有影响,所以只需要处理后面的点,而后面的点分为两种情况: 1:查询区间的左 阅读全文
posted @ 2018-08-17 12:03 维和战艇机 阅读(218) 评论(0) 推荐(0)