随笔分类 -  数据结构

摘要:题目链接 每次给两个数l,r,要我们选一个x使得i=1kdist(l,x,r)的值最小。可以知道要让答案最小的话,x一定要刚好把l,r平均分在两边,如果不是平分的话,x就会向多的一侧移动,所以要我们求得就是中位数。 nbsp;emsp;中位数我 阅读全文 »
posted @ 2022-05-16 14:55 浅渊 阅读(21) 评论(0) 推荐(0) 编辑
摘要:题目大意:要我们对一段区间进行两种操作:1.区间加法,2.查询区间gcd。 看到有区间修改的操作,首先考虑用线段树,这样可以方便的维护区间修改的操作,但是区间gcd是会随着区间修改而时刻变化的,比如:区间为2,4,6,此时的区间gcd2,但是如果给这个区间的每 阅读全文 »
posted @ 2022-05-10 13:50 浅渊 阅读(168) 评论(0) 推荐(0) 编辑
摘要:题目链接 操作一就是很简单的单点修改。操作二求最大子段和是本题的重点。 最大子段和可能分布在这个节点的左儿子的最大子段和,要么是右儿子的最大子段和,要么是横跨两部分(左儿子的后缀加右儿子的前缀)。而当前节点的最大前缀是maxpre[ls],sum[ls]+pre[rs],最大后缀是 阅读全文 »
posted @ 2022-05-01 23:30 浅渊 阅读(45) 评论(0) 推荐(0) 编辑
摘要:题目链接 因为我们对区间进行异或的操作,如果我们考虑一个一个暴力的异或过去那肯定是会超时的。那么我就可以将二进制拆位,我们可以发现它的数据范围最大的是106也就是219次方左右的,我们可以把这每一位的二进制分别用一个线段树存下来,这样的话区间的异或操作就可以转化成所有数每一位的区 阅读全文 »
posted @ 2022-05-01 17:44 浅渊 阅读(24) 评论(0) 推荐(0) 编辑
摘要:题目链接 如果只是进行操作一的话,那就是很简单的操作每一次直接乘就好了,但是我们还要进行操作二:要把前某几次乘的数除掉,所以我们就需要把每一次乘的数都存储下来,且是按顺序的。我们可以想到用一个数组或者是vector来顺序存储。但是我们会发现,这样的话我们每一次输出的时候就需要把所有的数都乘起来那 阅读全文 »
posted @ 2022-05-01 00:24 浅渊 阅读(57) 评论(0) 推荐(0) 编辑
摘要:题目链接 运用扫描线的方法,每一次都用一个大小固定的小矩形去框住星星,大致过程如图所示 我们要求出小矩形最多可以框住多少颗星星,也就是求出来这个区间的最大值是多少,因为小矩形的移动过程中要维护区间最大值,所以我们可以选择用线段树去维护区间最大值,我们按照星星的纵坐标去建树,并且我们要对星星按照它的横 阅读全文 »
posted @ 2022-04-30 22:23 浅渊 阅读(40) 评论(0) 推荐(0) 编辑
摘要:题目链接 这个题目就是让我们实现三个操作1.区间加,2.区间开方,3.区间求和。可以用势能线段树来写,也可以用分块来写。我们就用分块来写这个题。 我们先对整个序列进行预处理,将整个序列分成多个块 for (int i = 1; i <= n; i ++ ) std::cin >> a[i 阅读全文 »
posted @ 2022-04-27 18:55 浅渊 阅读(133) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示