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