
数据结构
文章平均质量分 59
Gurenge
TA不是很懒,但也还没有添加简介
展开
-
代码源每日一题Div.1 第二大数字和(set)
题目链接题意思路 我们考虑对于每一个数,有多少个区间的第二大数为该数,即可得到该数的贡献; 若当前数 x 位于下标 i 的位置,可向左右找第一个大于该数的数的位置,记为 l,r,继续找第二个大于该数的数的位置,记为 ll,rr,则该数的贡献即为,表示 x 作为第二大数,第一大数分别为右边第一个比 x 的数,或左边第一个比 x 的数; 现在问题转换为如何快速找到,两边比当前数大的第一,第二大的数,如果我们从大到小依次将数,填入数组,则当填入 x 时,在数组中...原创 2022-05-01 16:55:26 · 615 阅读 · 0 评论 -
L3-032 关于深度优先搜索和逆序对的题应该不会很难吧这件事(思维,树状数组)
题目链接题意思路 一时间无从下手,听了dls的讲解才有了写思路; 观察到若两个点 x,y 是有祖先关系,设 x 为 y 的祖先,则无论以什么方式遍历,x 始终在 y 的前面,我们将这样的点对记为第一类点;其余没有祖先关系的点对记为第二类点; 对与第一类点,可通过计算它与它祖先形成的逆序对,暴力枚举祖先肯定会超时,在普通逆序对计算时,我们可以通过树状数组 / 线段树等数据结构快速地得到一个点的逆序对个数,所以如果对于一个点 x,我们将其所有祖先存在树状数组中,就...原创 2022-04-30 20:14:51 · 2969 阅读 · 1 评论 -
代码源每日一题Div.2 上帝的集合(优先队列,思维)
题目链接题意思路 若我们先只看操作1,3,是不是维护一个小顶堆即可; 但现在加上操作2,对所有的数加上一个 x,用堆没法轻易地改元素的值,这里可以类比线段树中的懒标记,每进行一次操作2,我们不是真的把这个 x 加到每一个数上,而是维护一个 lazy 标记,把 x 存起来,当进行操作3时,将 lazy 加到需要输出的数上即可; 但现在还有一个问题,假设当前堆中的序列为 1,2,3,lazy 为 2,现在要往堆中加一个 4,此时改 lazy 标记不应该作用于 4...原创 2022-04-14 19:22:54 · 341 阅读 · 1 评论 -
CF375D Tree and Queries(dsu on tree,小技巧)
题目链接题意思路 明显是 dsu on tree,主要看一下怎么维护答案; 问出现次数大于 k 的颜色种类数,可开一个数组记录每种颜色的出现次数,再用树状数组或线段树维护,对于每一个次数,有多小种颜色即可,复杂度; 或者,开一个数组 num[i] 表示出现次数大于等于 i 的颜色种类数,若当前一种颜色 x, 出现次数为 cnt[x]; 再加一个颜色 x 时,在 cnt[x] 变化之前,num[ cnt[x] + 1 ] + 1,且num[ ...原创 2022-04-10 19:06:18 · 279 阅读 · 0 评论 -
和谐之树(求线段树结点的最大编号)
题目链接题意根据线段树的建树函数,输出线段树结点的最大编号 id;思路 线段树中编号最大的结点一定出现在深度最大的那一层的最右边(废话) 假设当前一个区间 [ l , r ] ,当其分成两个区间 [ l , mid ] , [ mid + 1 , r ] 时,设两个区间的长度分别为 x , y, 则要么 x = y,要么 x = y + 1; 如果 x = y,则形成的左右子树形状完全相同,深度也相同,编号最大的结点一定出现在右子树上,即仅考虑右...原创 2022-04-05 09:45:43 · 821 阅读 · 0 评论 -
CF620E New Year Tree(线段树,状态压缩)
题目链接题意对一棵树,有两种操作:1.将以 u 为根的子树上的所有节点的颜色改为 c2. 询问以 uu 为根的子树上的所有节点的颜色数量思路可将树按dfn序放到线段树上,则操作 1 ,2 即为区间修改,区间查询操作;如何在线段树中查询区间包含的元素种类数,可以发现对于每一种颜色,在子树上的状态,只有有和没有,即0和1两种状态,且颜色种类数小于等于60,将颜色种类状态压缩,一个long long 数的每一位表示一种颜色是否出现在该区间中即可;代码#include &l原创 2022-02-21 13:05:51 · 159 阅读 · 0 评论 -
洛谷P4512 逛公园(线段树维护区间最大子段和)
题目链接题意 对序列 a 进行两个操作, 1.输出区间 [ l ,r ] 的最大子段和; 2.将 a[[i] 的值改为 x ;思路 线段树维护四个值,区间和 sum,包含该区间左端点的最大子段和 maxl,包含该区间右端点的最大子段和 maxr,该区间的最大字段和 mx; 线段树合并操作中,区间和等于两个子区间的区间和之和tree[p].sum=tree[p<<1].sum+tree[p<<1|1]....原创 2022-02-02 22:09:48 · 606 阅读 · 0 评论