01 2021 档案

摘要:题目 求区间最长回文串长度 1n5×105 题解 比较妙的做法,主要是在询问部分 预处理出以某位为中心回文半径长 pi,马拉车和二分+哈希均可 然后考虑询问区间 [l..r] 二分一个答案半径,st 表维护 \([l_{ 阅读全文
posted @ 2021-01-29 19:40 leiyuanze 阅读(182) 评论(0) 推荐(0) 编辑
摘要:人生第一道黑题祭 题解 本题偏重思维 判断回文可以考虑它的递归定义 只有一个字符的串是回文串。 只有两个字符的串,如果这两个字符相同,也是回文串; 如果 S 是回文串,那么在 S 的开头和末尾插入一个相同的字符,形成的新串也是回文串。 一个可以想到的方法是设 fx,y 阅读全文
posted @ 2021-01-28 21:03 leiyuanze 阅读(105) 评论(0) 推荐(0) 编辑
摘要:题解 这题很明显发现一个点到另一个点,必然最多只有一个进入下界的点和一个出来的点 分类讨论入点和出点的位置 要么都在 u>lca 或都在 lca>v 或分别有一个 那就有一个倍增做法 维护最优入点和最优出点即可 但考场并没想到这种方法 反而只想到了没脑的倍增维护矩阵转移的方法 我 阅读全文
posted @ 2021-01-27 22:09 leiyuanze 阅读(171) 评论(0) 推荐(0) 编辑
摘要:题目大意 给出数列 a,询问区间 [l,r] 内,满足 lijri,j 使 aixorai+1xor...xoraj 值最大,求这个最值 题解 这题比较新鲜,知道了一些从未知道的套路 先考虑 \(O 阅读全文
posted @ 2021-01-27 08:19 leiyuanze 阅读(71) 评论(0) 推荐(0) 编辑
摘要:题目 非常经典的题目 在 Bytemountainsn 座山峰,每座山峰有他的高度 hi 。有些山峰之间有双向道路相连,共 m 条路径,每条路径有一个困难值,这个值越大表示越难走。 现在有 q 组询问,每组询问询问从点 v 开始只经过困难值小于 阅读全文
posted @ 2021-01-26 22:15 leiyuanze 阅读(116) 评论(0) 推荐(0) 编辑
摘要:题解 这题做法很多呢! 目前我只试过线段树合并,因为最近在学 对于每一个点开一颗关于粮食类型的线段树 维护数量和区间最多的类型 然后考虑到合并子树的过程就类似于树上差分后做前缀和 所以我们可以树上差分一下,省去树剖的一只 log (但求 lca 还是打了树剖) 最后 阅读全文
posted @ 2021-01-26 10:40 leiyuanze 阅读(81) 评论(0) 推荐(0) 编辑
摘要:题解 套路套路地用线段树合并 注意:可能爆栈,所以 bfs 处理 合并要新开节点,不然后修改子树信息 Code #include<cstdio> #include<iostream> #define LL long long using namespace std; 阅读全文
posted @ 2021-01-26 09:24 leiyuanze 阅读(61) 评论(0) 推荐(0) 编辑
摘要:题目大意 大小为 n1 为根的树,点带权,求每个子树内大于本点的点的数量 1n1051pi109 题解 一眼静态链分治,然后统计? 离散化后树状数组维护即可 时间复杂度 nlog2(n) Code 阅读全文
posted @ 2021-01-25 21:40 leiyuanze 阅读(75) 评论(0) 推荐(0) 编辑
摘要:题解 真真正正是个码农题,不过很套路,熟练就打得很快,不过要用点维护边的信息在 LCA 出要注意,不能处理此点的信息 Code #include<cstdio> #include<iostream> #include<cstring> using namespace s 阅读全文
posted @ 2021-01-25 18:23 leiyuanze 阅读(100) 评论(0) 推荐(0) 编辑
摘要:题解 并不需要什么高级数据结构 用树链剖分维护 对于每种颜色开个 vector,然后把是这种颜色的点的 dfs 序加进来排序 对于 [dfn[top[x]],dfn[x]] 这一区间问有没有某种颜色 相当于问某种颜色有没有至少一个在这个区间内 直接 阅读全文
posted @ 2021-01-23 11:22 leiyuanze 阅读(122) 评论(0) 推荐(0) 编辑
摘要:题目 题解 很明显的 dp fu=min(au,(u,v)Efv) 然后套路的设 gu 表示不管重儿子的 fu fu=min(au,gu+fsonv) 然后推一波矩阵 \[ \beg 阅读全文
posted @ 2021-01-23 10:23 leiyuanze 阅读(94) 评论(0) 推荐(0) 编辑
摘要:题目 题解 对于 m=1 这档分 我们可以 dp 然后斜率优化 具体来说就是 fi=fj+(ij)×(ij+1)2+sum[j]sum[i] 很容易斜率优化 那么 m=3×105 时 考虑 \(cdq\ 阅读全文
posted @ 2021-01-23 08:16 leiyuanze 阅读(88) 评论(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 阅读(111) 评论(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 阅读(122) 评论(0) 推荐(0) 编辑
摘要:题解 本题的解法是丰富多彩的! 线段树做法是极好的 代码非常之少 一个很显然的想法是维护 n+1 颗线段树 那要怎么维护才能不爆空间呢? 我们发现尽管 n×m 那么大 但 q 相比 n×m 小得多 也就是说变动的点比较少 于是我们抓住这点 阅读全文
posted @ 2021-01-22 07:37 leiyuanze 阅读(134) 评论(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 阅读(77) 评论(0) 推荐(0) 编辑
摘要:题目 城市中有一条长度为 n 的道路,每隔 1 的长度有一个公交车站,编号从 0n,学校在 0 号车站的位置。其中每个公交车站(除了 n 号车站)有两个属性 civi,代表从这个公交车站出发的公交车的性质。ci 阅读全文
posted @ 2021-01-19 08:35 leiyuanze 阅读(187) 评论(0) 推荐(0) 编辑
摘要:分析 一个比较显然的方式是 设 fi,j,x,y 表示达到空格所处位置为 (i,j) 且特殊格位置为 x,y 的状态的最少步数 一次可以交换空格和相邻格,代价为 1bfs 转移即可 但确实时间无法接受 我们想到转移时 当且仅当空格和特殊格相邻时特殊格的 阅读全文
posted @ 2021-01-18 08:05 leiyuanze 阅读(209) 评论(0) 推荐(0) 编辑
摘要:题目 到处都有 闲话 碰巧考场上出了 Noip 原题 然后这题自然而然想到 预处理一个点开始分别由 AB 驾驶会走到的下一个点 然后用预处理的数组求答案 当然你会发现 X=X0 这一问和后面的问的解法没什么区别 这都不是重点 ccf 很良心给暴力 70阅读全文
posted @ 2021-01-15 21:23 leiyuanze 阅读(176) 评论(0) 推荐(0) 编辑
摘要:分析 一个非常显然的单调队列+线段树的常规题 当然,扫描线一样一样的 但因为以前是直接动态开点的,所以这次打个离散化版本 Code #include<cstdio> #include<algorithm> #include<iostream> #define LL long long #de 阅读全文
posted @ 2021-01-15 08:09 leiyuanze 阅读(65) 评论(0) 推荐(0) 编辑
摘要:可持久化并查集 性质 可持久化并查集 = 可持久化数组 + 并查集 = 主席树 + 并查集 时间复杂度 O(nlog2n) Code #include<cstdio> #include<iostream> using namespace std; const int N = 2 阅读全文
posted @ 2021-01-01 15:48 leiyuanze 阅读(111) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示