上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 26 下一页
摘要: 题目 求区间最长回文串长度 \(1 \le n\le 5 \times 10^5\) 题解 比较妙的做法,主要是在询问部分 预处理出以某位为中心回文半径长 \(p_i\),马拉车和二分+哈希均可 然后考虑询问区间 \([l..r]\) 二分一个答案半径,\(\text st\) 表维护 \([l_{ 阅读全文
posted @ 2021-01-29 19:40 leiyuanze 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 人生第一道黑题祭 题解 本题偏重思维 判断回文可以考虑它的递归定义 只有一个字符的串是回文串。 只有两个字符的串,如果这两个字符相同,也是回文串; 如果 \(S\) 是回文串,那么在 \(S\) 的开头和末尾插入一个相同的字符,形成的新串也是回文串。 一个可以想到的方法是设 \(f_{x,y}\) 阅读全文
posted @ 2021-01-28 21:03 leiyuanze 阅读(100) 评论(0) 推荐(0) 编辑
摘要: 题解 这题很明显发现一个点到另一个点,必然最多只有一个进入下界的点和一个出来的点 分类讨论入点和出点的位置 要么都在 \(u->lca\) 或都在 \(lca->v\) 或分别有一个 那就有一个倍增做法 维护最优入点和最优出点即可 但考场并没想到这种方法 反而只想到了没脑的倍增维护矩阵转移的方法 我 阅读全文
posted @ 2021-01-27 22:09 leiyuanze 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 题目大意 给出数列 \(\text a\),询问区间 \([l,r]\) 内,满足 \(l\le i \le j\le r\) 的 \(i,j\) 使 \(a_i xor a_{i+1} xor...xor a_j\) 值最大,求这个最值 题解 这题比较新鲜,知道了一些从未知道的套路 先考虑 \(O 阅读全文
posted @ 2021-01-27 08:19 leiyuanze 阅读(69) 评论(0) 推荐(0) 编辑
摘要: 题目 非常经典的题目 在 \(Bytemountains\) 有 \(n\) 座山峰,每座山峰有他的高度 \(h_i\) 。有些山峰之间有双向道路相连,共 \(m\) 条路径,每条路径有一个困难值,这个值越大表示越难走。 现在有 \(q\) 组询问,每组询问询问从点 \(v\) 开始只经过困难值小于 阅读全文
posted @ 2021-01-26 22:15 leiyuanze 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 题解 这题做法很多呢! 目前我只试过线段树合并,因为最近在学 对于每一个点开一颗关于粮食类型的线段树 维护数量和区间最多的类型 然后考虑到合并子树的过程就类似于树上差分后做前缀和 所以我们可以树上差分一下,省去树剖的一只 \(\log\) (但求 \(\text {lca}\) 还是打了树剖) 最后 阅读全文
posted @ 2021-01-26 10:40 leiyuanze 阅读(78) 评论(0) 推荐(0) 编辑
摘要: 题解 套路套路地用线段树合并 注意:可能爆栈,所以 \(\text {bfs}\) 处理 合并要新开节点,不然后修改子树信息 \(Code\) #include<cstdio> #include<iostream> #define LL long long using namespace std; 阅读全文
posted @ 2021-01-26 09:24 leiyuanze 阅读(56) 评论(0) 推荐(0) 编辑
摘要: 题目大意 大小为 \(n\) 以 \(1\) 为根的树,点带权,求每个子树内大于本点的点的数量 \(1 \le n \le 10^5,1 \le p_i \le 10^9\) 题解 一眼静态链分治,然后统计? 离散化后树状数组维护即可 时间复杂度 \(n \log ^2 (n)\) \(Code\) 阅读全文
posted @ 2021-01-25 21:40 leiyuanze 阅读(71) 评论(0) 推荐(0) 编辑
摘要: 题解 真真正正是个码农题,不过很套路,熟练就打得很快,不过要用点维护边的信息在 \(\text{LCA}\) 出要注意,不能处理此点的信息 \(Code\) #include<cstdio> #include<iostream> #include<cstring> using namespace s 阅读全文
posted @ 2021-01-25 18:23 leiyuanze 阅读(97) 评论(0) 推荐(0) 编辑
摘要: 题解 并不需要什么高级数据结构 用树链剖分维护 对于每种颜色开个 \(\text{vector}\),然后把是这种颜色的点的 \(\text{dfs}\) 序加进来排序 对于 \([dfn[top[x]],dfn[x]]\) 这一区间问有没有某种颜色 相当于问某种颜色有没有至少一个在这个区间内 直接 阅读全文
posted @ 2021-01-23 11:22 leiyuanze 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 题目 题解 很明显的 \(dp\) \(f_u = \min(a_u, \sum_{(u,v) \in E}f_v)\) 然后套路的设 \(g_u\) 表示不管重儿子的 \(f_u\) \(f_u = \min(a_u, g_u+f_{\text{son}_v})\) 然后推一波矩阵 \[ \beg 阅读全文
posted @ 2021-01-23 10:23 leiyuanze 阅读(91) 评论(0) 推荐(0) 编辑
摘要: 题目 题解 对于 \(m=1\) 这档分 我们可以 \(dp\) 然后斜率优化 具体来说就是 \(f_i = f_j + \frac{(i-j)\times (i-j+1)}{2} + sum[j]-sum[i]\) 很容易斜率优化 那么 \(m=3\times 10^5\) 时 考虑 \(cdq\ 阅读全文
posted @ 2021-01-23 08:16 leiyuanze 阅读(87) 评论(0) 推荐(0) 编辑
摘要: 题解 显然树形 \(dp\) 一波 然后套路的运用标题 \(Code\) #include<cstdio> #include<iostream> #define ls (p << 1) #define rs (ls | 1) using namespace std; typedef long lon 阅读全文
posted @ 2021-01-22 11:42 leiyuanze 阅读(107) 评论(0) 推荐(0) 编辑
摘要: 题解 两只 \(\log\) 的动态 \(dp\) ! 相比标算倍增 动态 \(dp\) 既实用又好理解 \(Code\) #include<cstdio> #include<iostream> #define ls (p << 1) #define rs (ls | 1) using namesp 阅读全文
posted @ 2021-01-22 10:31 leiyuanze 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 题解 本题的解法是丰富多彩的! 线段树做法是极好的 代码非常之少 一个很显然的想法是维护 \(n+1\) 颗线段树 那要怎么维护才能不爆空间呢? 我们发现尽管 \(n \times m\) 那么大 但 \(q\) 相比 \(n \times m\) 小得多 也就是说变动的点比较少 于是我们抓住这点 阅读全文
posted @ 2021-01-22 07:37 leiyuanze 阅读(123) 评论(0) 推荐(0) 编辑
上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 26 下一页