01 2021 档案

摘要:题目 求区间最长回文串长度 \(1 \le n\le 5 \times 10^5\) 题解 比较妙的做法,主要是在询问部分 预处理出以某位为中心回文半径长 \(p_i\),马拉车和二分+哈希均可 然后考虑询问区间 \([l..r]\) 二分一个答案半径,\(\text st\) 表维护 \([l_{ 阅读全文
posted @ 2021-01-29 19:40 leiyuanze 阅读(199) 评论(0) 推荐(0)
摘要:人生第一道黑题祭 题解 本题偏重思维 判断回文可以考虑它的递归定义 只有一个字符的串是回文串。 只有两个字符的串,如果这两个字符相同,也是回文串; 如果 \(S\) 是回文串,那么在 \(S\) 的开头和末尾插入一个相同的字符,形成的新串也是回文串。 一个可以想到的方法是设 \(f_{x,y}\) 阅读全文
posted @ 2021-01-28 21:03 leiyuanze 阅读(111) 评论(0) 推荐(0)
摘要:题解 这题很明显发现一个点到另一个点,必然最多只有一个进入下界的点和一个出来的点 分类讨论入点和出点的位置 要么都在 \(u->lca\) 或都在 \(lca->v\) 或分别有一个 那就有一个倍增做法 维护最优入点和最优出点即可 但考场并没想到这种方法 反而只想到了没脑的倍增维护矩阵转移的方法 我 阅读全文
posted @ 2021-01-27 22:09 leiyuanze 阅读(179) 评论(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 阅读(89) 评论(0) 推荐(0)
摘要:题目 非常经典的题目 在 \(Bytemountains\) 有 \(n\) 座山峰,每座山峰有他的高度 \(h_i\) 。有些山峰之间有双向道路相连,共 \(m\) 条路径,每条路径有一个困难值,这个值越大表示越难走。 现在有 \(q\) 组询问,每组询问询问从点 \(v\) 开始只经过困难值小于 阅读全文
posted @ 2021-01-26 22:15 leiyuanze 阅读(118) 评论(0) 推荐(0)
摘要:题解 这题做法很多呢! 目前我只试过线段树合并,因为最近在学 对于每一个点开一颗关于粮食类型的线段树 维护数量和区间最多的类型 然后考虑到合并子树的过程就类似于树上差分后做前缀和 所以我们可以树上差分一下,省去树剖的一只 \(\log\) (但求 \(\text {lca}\) 还是打了树剖) 最后 阅读全文
posted @ 2021-01-26 10:40 leiyuanze 阅读(85) 评论(0) 推荐(0)
摘要:题解 套路套路地用线段树合并 注意:可能爆栈,所以 \(\text {bfs}\) 处理 合并要新开节点,不然后修改子树信息 \(Code\) #include<cstdio> #include<iostream> #define LL long long using namespace std; 阅读全文
posted @ 2021-01-26 09:24 leiyuanze 阅读(66) 评论(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 阅读(81) 评论(0) 推荐(0)
摘要:题解 真真正正是个码农题,不过很套路,熟练就打得很快,不过要用点维护边的信息在 \(\text{LCA}\) 出要注意,不能处理此点的信息 \(Code\) #include<cstdio> #include<iostream> #include<cstring> using namespace s 阅读全文
posted @ 2021-01-25 18:23 leiyuanze 阅读(102) 评论(0) 推荐(0)
摘要:题解 并不需要什么高级数据结构 用树链剖分维护 对于每种颜色开个 \(\text{vector}\),然后把是这种颜色的点的 \(\text{dfs}\) 序加进来排序 对于 \([dfn[top[x]],dfn[x]]\) 这一区间问有没有某种颜色 相当于问某种颜色有没有至少一个在这个区间内 直接 阅读全文
posted @ 2021-01-23 11:22 leiyuanze 阅读(168) 评论(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 阅读(96) 评论(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 阅读(101) 评论(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 阅读(118) 评论(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 阅读(152) 评论(0) 推荐(0)
摘要:题解 本题的解法是丰富多彩的! 线段树做法是极好的 代码非常之少 一个很显然的想法是维护 \(n+1\) 颗线段树 那要怎么维护才能不爆空间呢? 我们发现尽管 \(n \times m\) 那么大 但 \(q\) 相比 \(n \times m\) 小得多 也就是说变动的点比较少 于是我们抓住这点 阅读全文
posted @ 2021-01-22 07:37 leiyuanze 阅读(138) 评论(0) 推荐(0)
摘要:题目 有 \(X+Y+Z\) 个三元组 \((x[i],y[i],z[i])\),请你从每个三元组中挑数,并满足以下条件: 1、每个三元组中可以且仅可以选择一个数(即 \(x[i],y[i],z[i]\) 中的一个) 2、选择 \(x[i]\) 的三元组个数恰好为 \(X\) 3、选择 \(y[i] 阅读全文
posted @ 2021-01-20 08:40 leiyuanze 阅读(79) 评论(0) 推荐(0)
摘要:题目 城市中有一条长度为 \(n\) 的道路,每隔 \(1\) 的长度有一个公交车站,编号从 \(0\) 到 \(n\),学校在 \(0\) 号车站的位置。其中每个公交车站(除了 \(n\) 号车站)有两个属性 \(c_i\) 和 \(v_i\),代表从这个公交车站出发的公交车的性质。\(c_i\) 阅读全文
posted @ 2021-01-19 08:35 leiyuanze 阅读(238) 评论(0) 推荐(0)
摘要:分析 一个比较显然的方式是 设 \(f_{i,j,x,y}\) 表示达到空格所处位置为 \((i,j)\) 且特殊格位置为 \(x,y\) 的状态的最少步数 一次可以交换空格和相邻格,代价为 \(1\),\(bfs\) 转移即可 但确实时间无法接受 我们想到转移时 当且仅当空格和特殊格相邻时特殊格的 阅读全文
posted @ 2021-01-18 08:05 leiyuanze 阅读(250) 评论(0) 推荐(0)
摘要:题目 到处都有 闲话 碰巧考场上出了 \(Noip\) 原题 然后这题自然而然想到 预处理一个点开始分别由 \(A,B\) 驾驶会走到的下一个点 然后用预处理的数组求答案 当然你会发现 \(X=X0\) 这一问和后面的问的解法没什么区别 这都不是重点 \(ccf\) 很良心给暴力 \(70\) 分 阅读全文
posted @ 2021-01-15 21:23 leiyuanze 阅读(183) 评论(0) 推荐(0)
摘要:分析 一个非常显然的单调队列+线段树的常规题 当然,扫描线一样一样的 但因为以前是直接动态开点的,所以这次打个离散化版本 \(Code\) #include<cstdio> #include<algorithm> #include<iostream> #define LL long long #de 阅读全文
posted @ 2021-01-15 08:09 leiyuanze 阅读(71) 评论(0) 推荐(0)
摘要:可持久化并查集 性质 可持久化并查集 = 可持久化数组 + 并查集 = 主席树 + 并查集 时间复杂度 \(O(n log^2 n)\) \(Code\) #include<cstdio> #include<iostream> using namespace std; const int N = 2 阅读全文
posted @ 2021-01-01 15:48 leiyuanze 阅读(116) 评论(0) 推荐(0)