摘要:Description 给出一个$a$,选出$7$个数要求$P_1\ge P_2\ge P_3\ge P_4\ge P_5 \ge P_6 \ge P_7$ 并且使得$P_1<P_2+P_3<P_4+P_5+P_6+P_7$,最后令$7$个数的和最大 Solution 先对$a$数组降序排序 考虑$
阅读全文
摘要:Description 一棵$N$个节点的树, 每个节点上都有 互不相同的 $[0, ~N 1]$ 的数。 定义一条路径上的数的集合为 $S$, 求一条路径使得 $Mex(S)$ 最大。 带修改, $M$ 次查询 Solution 用一棵权值线段树维护。 节点 $[L,R]$存储信息:是否有一条路径
阅读全文
摘要:Solution 线段树维护 sum 表示区间内预约个数, L 表示区间最左边的预约, R 表示区间最右边的预约。 $pushup$ 就是这样 : 每次查询答案类似于$pushup$。 考虑把旧预约删去 : 若该次新预约 开始时间为$l$, 结束时间为$r$,是第$i$ 个预约, 则将 与该区间在右
阅读全文
摘要:Solution 用$col$记录 数量最多的种类, $sum$记录 种类$col$ 的数量。 然后问题就是树上链修改, 求 每个节点 数量最多的种类。 用树上差分 + 线段树合并更新即可。 Code 1 #include<cstdio> 2 #include<cstring> 3 #include
阅读全文
摘要:Solution 先Tarjan求出点双联通分量 并缩点。 用$multiset$维护 点双内的最小点权。 容易发现, 点双内的最小点权必须包括与它相连的割边的点权。 所以我们必须想办法来维护。 所以考虑用割点的点权更新它的父节点, 这样查询 点双 内的最小点权只需要查询本身的 $multiset$
阅读全文
摘要:Description 1: 查询一个集合内的K大值 2: 合并两个集合 Solution 启发式合并主席树板子 Code 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define rd read() 5 #defi
阅读全文
摘要:Description 给你一片森林, 支持两个操作: 查询$x$到$y$的$K$大值, 连接两棵树中的两个点 Solution 对每个节点$x$动态开权值线段树, 表示从$x$到根节点路径上权值出现的次数。 查询时差分即可: $sum[x]+sum[y]-sum[lca]-sum[f[lca]]$
阅读全文
摘要:Description 传送门 给出一个n个点的树,1号节点为根节点,每个点有一个权值 你需要支持以下操作 1.将以u为根的子树内节点(包括u)的权值加val 2.将(u, v)路径上的节点权值加val 3.询问(u, v)路径上节点的权值两两相乘的和 Solution 维护 平方和与 数值和 修改
阅读全文
摘要:描述 一个叫做立方体大作战的游戏风靡整个Byteotia。这个游戏的规则是相当复杂的,所以我们只介绍他的简单规则:给定玩家一个有2n个元素的栈,元素一个叠一个地放置。这些元素拥有n个不同的编号,每个编号正好有两个元素。玩家每次可以交换两个相邻的元素。如果在交换之后,两个相邻的元素编号相同,则将他们都
阅读全文
摘要:description 查询区间最大和最小 题解 线段树 愉悦身心啊 代码 1 #include<cstring> 2 #include<cstdio> 3 #include<algorithm> 4 #define rd read() 5 #define lson nd << 1 6 #defin
阅读全文
摘要:题解 非常容易想到的线段树, 还可以用并查集来。 还有一位大神用了$O(n)$ 就过了Orz 要判断是否能染色出输入给出的序列,必须满足两个条件: 1、 序列中必须存在一个$q$ 2、 两个相同的数$x$的中间不存在比 $ x$ 小的数 首先判断输入的数列中是否存在$q$, 若不存在$q$ 且没有
阅读全文
摘要:题解 是我从来没有做过的裂点splay。。。 看的时候还是很懵逼的QAQ。 把最后一列的$n$个数放在一个平衡树中, 有 $n$ 个点 剩下的$n$行数, 每行都开一个平衡树,开始时每棵树中仅有$1$个点, 记录了开始时的区间左端点 $1$ 和右端点$m - 1$。 这样每次出队都最多只会影响两棵平
阅读全文