随笔分类 -  其他

上一页 1 2 3 4 5 6 7 8 ··· 33 下一页
摘要:现在看来这道题就简单了. 首先要知道,树形 DP 的复杂度是 $O(n^2)$ 的(通过严格控制子树大小,均摊下来一个状态只会贡献 n 次). 然后这道题要求选的个数最多为 $k$,所以复杂度就是 $O(nk)$ 的. 设 4 个状态:$f[x][y][0/1],g[x][y][0/1]$ 分别代表 阅读全文
posted @ 2020-07-13 10:47 EM-LGH 阅读(197) 评论(0) 推荐(0)
摘要:这道题有 3 个操作: 1. 换根 2. 求 LCA 3. 子树修改/子树求和. 对于第一个操作,直接换根就行. 对于第二个操作,分这几种情况讨论:$x,y$ 都在以 1 为根,$rt$ 的子树中,$x,y$ 其中 1 个在子树中,$x,y$ 都不在子树中. 对于都在子树中的情况,答案即为 $lca 阅读全文
posted @ 2020-07-13 09:20 EM-LGH 阅读(154) 评论(0) 推荐(0)
摘要:归纳+找规律. 如果终点 $r$ 是奇数,那么 $r-m-1$ ~ $r-1$ 这段区间都是先手必败. 然后我们发现 $r-m-1$ 及之前都是偶数的话还是先手比败,直到遇到一个奇数,就又变成了先手必胜. 那么,对于一个奇数位置,其前面第一个先手必胜位置就是 $r-m-1$ 前第一个奇数位置. 对于 阅读全文
posted @ 2020-07-11 14:47 EM-LGH 阅读(139) 评论(0) 推荐(0)
摘要:比较好的一道贪心题. 有 3 种操作: 1. 对一个位置赋值. 2. 对一个位置进行加法. 3. 对一个位置进行乘法. 显然,如果想让结果最大,顺序一定是 1,2,3 即先赋值再加最后乘. 3 种情况同时存在不好比较,那么考虑将所有操作都转换成乘法. 假设一个操作加了 $x$,另一个操作乘了 $y$ 阅读全文
posted @ 2020-07-11 12:04 EM-LGH 阅读(129) 评论(0) 推荐(0)
摘要:刚开始想出了一个分治做法,但是比较麻烦,需要分 4 中情况讨论. 后来偷看了一眼标签发现是线段树,然后就想出了这个线段树做法. 考虑序列以 $r$ 为右端点的答案,有 $\sum_{l=1}^{i} max(l,i)-min(l,i)=i-l$. 其中这个条件可以写成 $max(l,i)-min(l 阅读全文
posted @ 2020-07-11 07:51 EM-LGH 阅读(218) 评论(0) 推荐(0)
摘要:挺好的一道题. 判断先手必胜即判断所有数异或值是否为 0. 直接判断的话不好做,不妨先强制所有数选 a,然后再看有几种方案使得选一些 b 让序列异或值为 0. 假如想让位置 i 从 a->b,要异或上 $a_{i}$ xor $b_{i}$. 那么,就先求出所有 $a_{i}$ 的异或和 sum,然 阅读全文
posted @ 2020-07-10 10:27 EM-LGH 阅读(192) 评论(0) 推荐(0)
摘要:结论:如果边权非负,则距离树上一个点最远的点一定是直径端点之一. 由此可得我们只需维护树的直径就行. 这种维护方法的局限性在于不可以有删边操作. 假如合并两个连通块 A,B, 直径端点分别为 $x_{0},x_{1},x_{2},x_{3}$,新树直径的端点一定是在 4 个点中的两个. 那就两两取 阅读全文
posted @ 2020-07-10 09:59 EM-LGH 阅读(198) 评论(0) 推荐(0)
摘要:可以将跳左/右/父亲抽象成二进制的形式. 跳左:x<<1 跳右:x<<1|1 父亲:x>>1 但是题中说如果跳到根节点之后再跳父亲编号仍然不变比较不好处理. 但是我们发现一个性质:令 $fl$ 表示一个区间能跳到最靠上的祖先,$path$ 表示跳到该祖先后向下跳的路径,答案一定可以表示成 max(1 阅读全文
posted @ 2020-07-10 09:13 EM-LGH 阅读(203) 评论(0) 推荐(0)
摘要:假设当前进行到操作 $m$. 1. 将区间 $[l,r]$ 每个数加上 $v$. 2. 询问当前区间 $[l,r]$ 的和. 3. 令 $S(l,r,x)$ 代表 $[l,r]$ 区间在时刻 $x$ 时之和,求 $\sum_{i=0}^{m} S(l,r,i)$. 题解: 对于一个区间,我们要求当前 阅读全文
posted @ 2020-07-09 16:09 EM-LGH 阅读(2054) 评论(1) 推荐(7)
摘要:非常好的一道题. 假设当前要求 $ans[x]$. 先令 $x$ 为根,然后发现对于子树 $y$ 来说,令 $g[y]$ 表示距离 $y$ 最近的叶子节点. 若 $g[y] \leqslant dis(x,y) $ 则 $y$ 子树的叶子中选一个就可以防止 $x$ 走到 $y$ 的子树中. 那么这个 阅读全文
posted @ 2020-07-09 10:46 EM-LGH 阅读(163) 评论(0) 推荐(0)
摘要:根据期望的定义,我们可以求出所有情况之和再除以情况数量. 如果长度满足 $n=2^k$,线段树上一个节点新加 $v$ 的话 $v$ 的贡献就是 $v \times si[x]$,si[x] 即子树下叶节点个数. 如果长度不满足上述条件,由于线段树是完全二叉树结构,我们可以强制让深度小于最大深度的叶节 阅读全文
posted @ 2020-07-09 07:53 EM-LGH 阅读(172) 评论(0) 推荐(0)
摘要:刚开始看到这道题的时候想的是线段树分治,毕竟这里的乘法和加法都是可以撤销的. 但是后来发现如果想要线段树分治的话就必须要满足交换律,但是标记 $(x,y)$ ( 乘 $x$ 后加 $y$)只满足结合律,不满足交换律. 那么就考虑 kdtree. kdtree 是维护平面上点的数据结构,然后我们可以把 阅读全文
posted @ 2020-07-06 15:20 EM-LGH 阅读(163) 评论(0) 推荐(0)
摘要:令 $ok[l][r]$ 表示 $[l,r]$ 是否都能删掉,$g[l][r],f[l][r]$ 分别表示能否删成只剩左/右端点. 然后按照区间 DP 的方式来转移上述 3 个状态,得到最终的 $ok[l][r]$. 最后再令 $ans[i]$ 表示 $1$ ~ $i$ 的最优解,然后枚举 $ok[ 阅读全文
posted @ 2020-07-06 14:25 EM-LGH 阅读(138) 评论(0) 推荐(0)
摘要:比较好的一道虚树题. 建出虚树,然后计算虚树中距离点 $x$ 最近的关键点,这个来一次树形dp+换根即可实现. 难点在于计算 $x$ 到 $x$ 父亲这一段所有节点归属于谁(肯定属于 $x$ 的最近点或 $x$ 父亲最近点). 这里的话肯定可以二分出拐点(拐点以前属于 $x$,拐点以后属于 $y$) 阅读全文
posted @ 2020-07-05 12:29 EM-LGH 阅读(166) 评论(0) 推荐(0)
摘要:题意:给定一个排列,每次有两种操作:1 区间降序排列 2 区间升序排列,求 m 才操作后 q 位置上的数字 这道题非常神仙啊. 假如说序列中只有 0,1 的话我们只需要用线段树维护 0,1的个数然后进行区间覆盖即可. 由于所有数互不相同,考虑二分 $q$ 点上的数 $mid$,然后将大于等于 $mi 阅读全文
posted @ 2020-07-05 08:11 EM-LGH 阅读(141) 评论(0) 推荐(0)
摘要:直接算不好算,考虑拆开系数来算贡献. 对于 $b_{i}w_{i}$,可以看成 $1$ ~ $i$ 中每走一步就会产生 $w_{i}$ 的贡献,也就说 $i$ 的贡献就是 $i$ 的后缀和. 那么问题可以转化为: 有 $n$ 个元素,每个元素可以选 $[-k,k]$ 个,且第 $i$ 时刻选的元素个 阅读全文
posted @ 2020-07-05 08:05 EM-LGH 阅读(198) 评论(0) 推荐(0)
摘要:可以将问题抽象成选 1 就向右走,选 0 就向上走,且不能经过 y=x+1 的方案数. 考虑容斥:总-不合法. 总方案数就是 $\binom{n+m}{n}$,然后不合法的方案数对于 y=x+1 对称后发现就是 $(-1,1)$ 走到 $(n,m)$ 的方案数. code: #include <bi 阅读全文
posted @ 2020-07-05 08:02 EM-LGH 阅读(169) 评论(0) 推荐(0)
摘要:不难的一道字符串题. 建立 $T$ 的 SAM,然后根据 $S$ 中的询问按照右端点离线,依次在 $T$ 的 SAM 上匹配. 查询的时候分两种情况讨论一下,用线段树维护就行了. code: #include <cstdio> #include <cstring> #include <algorit 阅读全文
posted @ 2020-06-29 11:23 EM-LGH 阅读(133) 评论(0) 推荐(0)
摘要:对于一类带修改问题可以采用对时间(操作)分块,然后定期重构的方式来维护. 设块的大小为 $B$,则重构 $\frac{Q}{B}$ 次,每次查询的复杂度为 $O(B \log n)$. 计算一下 $B$ 的大小来平衡重构和查询的复杂度即可. 这种纯数据结构题都挺好写的. 时间复杂度要计算好,块的大小 阅读全文
posted @ 2020-06-29 10:07 EM-LGH 阅读(142) 评论(0) 推荐(0)
摘要:打的 vp,花了 1h 30min 切了前 6 个,后来花了 20min 把最后一题也切掉了. 难度不大,但是想要进前 10 的话手速还是要快一点. A - Short Substrings 观察一下字符串,然后发现相同的保留一个就行. #include <bits/stdc++.h> #defin 阅读全文
posted @ 2020-06-28 19:25 EM-LGH 阅读(193) 评论(0) 推荐(0)

上一页 1 2 3 4 5 6 7 8 ··· 33 下一页