摘要: Solution 线段树套 trie,秒了! \(O(n\log^2 n)\) Code #include <bits/stdc++.h> using namespace std; #define rep(i, j, k) for (int i = (j); i <= (k); ++i) #defi 阅读全文
posted @ 2024-10-07 09:30 Laijinyi 阅读(8) 评论(0) 推荐(0) 编辑
摘要: Statement 一棵树,每个节点上有一个集合,每个儿子集合由父亲集合增加一个点 \((x_i,c_i)\) 或删除一个点得到。根节点集合为 \(\{(0,0,0,c_0)\}\) 多次询问,每次问 \(u\) 点的集合内,\(\min\{(x_i-x)^2+c_i\}\) Solution 首先 阅读全文
posted @ 2024-10-07 09:28 Laijinyi 阅读(6) 评论(0) 推荐(0) 编辑
摘要: Statement 求平面最近点对的距离,距离定义为欧几里德距离。 Solution 考虑按 \(x\) 排序,分治计算 先往左右递归,设得到的答案为 \(d\),当前算跨过中点的答案,那么答案 \(\ge d\) 的点对可以不用枚举 设中点为 \(m\) 对 \(i\in[l..m]\),\(x_ 阅读全文
posted @ 2024-10-07 09:27 Laijinyi 阅读(95) 评论(0) 推荐(0) 编辑
摘要: Statement 维护一个括号序列,有以下操作: 区间覆盖 区间翻转 区间反转(左括号变右括号,右括号变左括号) 区间问最少改多少位能使括号序列合法,保证有解 Solution 单纯没想到答案怎么算。。。 首先一段括号序,如果消除中间的所有匹配,最终一定形如 ))))(((,这个信息是可合并的 设 阅读全文
posted @ 2024-10-07 09:26 Laijinyi 阅读(8) 评论(0) 推荐(0) 编辑
摘要: Solution 单次二分:问“重要度 \(\ge x\) 的所有操作,且 \(t\) 时间点还存在的所有操作中,是否有不经过这个点的” 整体二分:保持操作、询问按时间有序,即预先按时间排序,下传时保持有序; 对于一次 Solve,对于所有重要度 \(\ge mid+1\) 的操作(加入、删除),考 阅读全文
posted @ 2024-10-07 09:25 Laijinyi 阅读(8) 评论(0) 推荐(0) 编辑
摘要: Solution 单次二分:二分时间,做这个时间前的所有操作,然后线性统计。 注意到可以整体二分,直接整体二分是 \(O(n\log^2 n)\)。 考虑扫描序列,用线段树维护每个时间段内该位置的增加值,差分一下可以实现。 将这棵线段树持久化一下,一个国家所有位置同时二分即可 \(O(n\log n 阅读全文
posted @ 2024-10-07 09:22 Laijinyi 阅读(4) 评论(0) 推荐(0) 编辑
摘要: Statement 给出 \(n\) 个数的序列 \(\{a_i\}\),接下来 \(m\) 秒中每一秒会有一个数发生变化,然后恢复。 问最长的子序列长度,使得任意时刻这个子序列不下降。\(n\le 10^5\) Solution 设 \(b_i\) 为 \(i\) 最小能变成的数,\(c_i\) 阅读全文
posted @ 2024-10-07 09:21 Laijinyi 阅读(8) 评论(0) 推荐(0) 编辑
摘要: Solution 整体二分板子题 vector 太好写了111 #include <bits/stdc++.h> using namespace std; #define rep(i, j, k) for (int i = (j); i <= (k); ++i) #define reo(i, j, 阅读全文
posted @ 2024-10-07 09:19 Laijinyi 阅读(4) 评论(0) 推荐(0) 编辑
摘要: Statement 先把串 reverse,多次给 \(l,r\),求 \[ \max_{l\le i<j\le r}\{\text{LCP}(i,j)\} \]Solution \(\text{sqrtlog}\sim\text{sqrt}\):莫队 + 线段树 / 树状数组 / set,用 SA 阅读全文
posted @ 2024-10-07 09:14 Laijinyi 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 我觉得这东西有必要记一下,因为光是看 PPT 很难自己写出代码……具体步骤相关啥都没写。 另外学这个东西也不是很必要…… Solution 我们需要一个维护最小值、最小值编号,支持区间加的 LCT。需要支持以下操作: \(find\_root(u)\) \(link(u,v)\) \(cut(u,v 阅读全文
posted @ 2024-10-07 09:08 Laijinyi 阅读(16) 评论(0) 推荐(0) 编辑
摘要: Statement 给串 \(t\),定义 \(B(s)\) 为 \(s\) 删一些字符后能出现最多多少个 bessie,\(A(t)\) 表示对 \(t\) 的所有子串 \(s\) 求 \(B(s)\) 的和,有 \(q\) 次单点修改,每次改完输出 \(B(s)\). Solution 动态 d 阅读全文
posted @ 2024-09-22 21:47 Laijinyi 阅读(24) 评论(0) 推荐(0) 编辑
摘要: Statement 树,每个点有一个颜色,初始每个点颜色互不相同 到根链涂上新颜色 链颜色数 \(u\) 子树内点 \(v\) 到根路径的最多颜色数 Solution 首先,相同颜色的点一定构成一条从下往上的链 考虑 LCT,维护一个性质:一条实链的点的颜色相同. 于是 \(u\) 到根的颜色数 \ 阅读全文
posted @ 2024-09-22 21:47 Laijinyi 阅读(4) 评论(0) 推荐(0) 编辑
摘要: Solution 与“区间本质不同回文子串个数”类似,但没有等差数列那样优美的性质了……下面是一个更通用的做法。 考虑移动一次右端点 \(r\),就相当于把 parent 树上一条到根链的 last endpos 设为 \(r\). 把这个看成 access 操作. 考虑用 LCT 维护 paren 阅读全文
posted @ 2024-09-22 21:46 Laijinyi 阅读(9) 评论(0) 推荐(0) 编辑
摘要: Statement 给出 \(k,p,L\),数序列 \(a\),满足如下条件: \(1\le a_i\le k\) \(\sum_i a_i=L\) \(\nexists i,a_i\ge p\land a_{i+1}\ge p\) 答案对 \(20201114\) 取模,\(p\le k\le 阅读全文
posted @ 2024-09-22 21:46 Laijinyi 阅读(5) 评论(0) 推荐(0) 编辑
摘要: Solution 先离散化,记 \(f(l,r,p)\) 为覆盖了 \([l,r]\) 区间内纵坐标 \(\ge p\) 的点最少矩形个数。则: \[ f(l,r,p)=\min(f(l,r,p),f(l,mid,p)+f(mid+1,r,p)) \]\[ f(l,r,p)=\min(f(l,r,p 阅读全文
posted @ 2024-09-22 21:45 Laijinyi 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 题面稍微有一点不一样。 Statement 给 \(n\) 个物品,每个物品有价值 \(v_i\)、体积 \(w_i\)。 \(q\) 次询问,问考虑 \([L..R]\) 区间的物品,用容量为 \(m\) 的背包最多能装多少价值的物品,有多少种方案,每个物品只能被装一次。 \(n\le 2\cdo 阅读全文
posted @ 2024-09-22 21:45 Laijinyi 阅读(7) 评论(0) 推荐(0) 编辑
摘要: Statement 问区间本质不同回文串数,强制在线,\(n\le10^5\). 其实还有个四倍经验:BZOJ 5384. Solution 1 考虑一个结论:\(s\) 的所有回文后缀按长度排序后,可以划分为 \(O(\log|s|)\) 段等差数列。 考虑离线怎么做:移动右端点 \(i\),新增 阅读全文
posted @ 2024-09-22 21:42 Laijinyi 阅读(17) 评论(0) 推荐(0) 编辑
摘要: Statement 维护一棵树,边权 \(\in\{\texttt a,\texttt b,\texttt c\}\),根为 \(1\),定义这棵树的子串为从 \(1\) 走到所有点构成的字符串的所有后缀,需要支持以下操作: 问当前树的本质不同子串数 给一个点添加一棵子树 问一个串在当前树中作为子串 阅读全文
posted @ 2024-09-22 21:41 Laijinyi 阅读(6) 评论(0) 推荐(0) 编辑
摘要: Statement 把 \(S\) 分成不超过 \(k\) 段,使每段的最大子串中的最大串最小。输出这个串。 Solution 按排名二分这个串,check 中从右往左贪心地划分,需要实现 \(O(1)\) 比较两个子串大小。 #include <bits/stdc++.h> using names 阅读全文
posted @ 2024-09-22 21:40 Laijinyi 阅读(8) 评论(0) 推荐(0) 编辑
摘要: Statement 给 \(n\) 个串,问每个串有多少子串是所有 \(n\) 个串中至少 \(k\) 个串的子串。 Solution 1 对于每个后缀,二分他最右的满足条件的前缀,这就是他贡献多少次。 设二分的 \(x\),可以二分找出 height 上左边、右边第一个 \(<\) 他的位置 同样 阅读全文
posted @ 2024-09-22 21:39 Laijinyi 阅读(5) 评论(0) 推荐(0) 编辑