随笔分类 -  题解

摘要:题面 模板题。直接容斥+矩阵树。复杂度 \(O(2^{n-1}(n-1)^3)\) 可以通过。 阅读全文
posted @ 2022-05-18 20:28 cunzai_zsy0531 阅读(13) 评论(0) 推荐(0)
摘要:题面 一个显然的做法是树剖之后dfs序线段树套时间线段树,直接做的复杂度是 \(O(n\log^3 n)\)。其实也可以把询问离线下来,做一个线段树分治,用树套树维护。 这样做比较麻烦,所以考虑另外一种思路:二分答案。因为有很多询问,不妨放在一起二分,所以可以想到整体二分。使用类似树上差分的思想,对 阅读全文
posted @ 2022-05-18 20:26 cunzai_zsy0531 阅读(34) 评论(0) 推荐(0)
摘要:题面 比较经典的带修树上第 \(k\) 大问题。通常的做法是树剖树套树然后树上二分,一般3到4个 \(\log\)。这个题还可以用整体二分解决。 思考一下这道题目的整体二分过程:二分一个答案 \(mid\),把所有的 \(>mid\) 的修改放到一个数据结构里,然后查询树上路径和。这显然可以使用树剖 阅读全文
posted @ 2022-05-18 20:21 cunzai_zsy0531 阅读(34) 评论(0) 推荐(0)
摘要:题面 \(q\) 次查询矩形第 \(k\) 小。考虑使用整体二分,二分一个值 \(mid\),矩形中小于等于 \(mid\) 的数设为 \(1\),大于 \(mid\) 的数设为 \(0\),统计每个询问的矩形中的和,若大于等于 \(k\),表示答案应该在 \([L,mid]\) 范围内,放到左边继 阅读全文
posted @ 2022-05-18 20:10 cunzai_zsy0531 阅读(55) 评论(0) 推荐(0)
摘要:题面 平面上两个操作:给一些坐标加权和查询矩形点权和。坐标 \(x,y\leq 2\times 10^6\),加权操作最多 \(1.6\times 10^5\) 个,查询操作最多 \(10000\) 个。 感觉时间和 \(x,y\) 大概能构成个三维偏序,直接上 cdq 分治。矩形查询看起来不是很好 阅读全文
posted @ 2022-05-18 20:06 cunzai_zsy0531 阅读(31) 评论(0) 推荐(0)
摘要:题面 考虑整体二分。solve(L,R,l,r) 表示解决的子问题为答案区间在 \([L,R]\) 内的所有问题 \(q_l...q_r\)。边界条件很容易,主要是考虑如何二分。\([L,R]\) 这一维相当于是描述的时间,那么考虑一个 \(mid\),然后把所有 \([L,mid]\) 时刻的修改 阅读全文
posted @ 2022-05-18 20:03 cunzai_zsy0531 阅读(35) 评论(0) 推荐(0)
摘要:题面 跟暴力写挂有点像,但是这次是三棵树的距离之和最大。考虑在第一棵树上点分治,合并两个儿子子树,求其中的最大值。这个过程可以合并果子,花费 \(1\log\)。在合并的时候拿出这些点来在第二棵树上建虚树,在虚树上 dp,每个位置维护子树内分别在要合并的两个子树(设为 \(0,1\))的直径(包括第 阅读全文
posted @ 2022-05-13 23:01 cunzai_zsy0531 阅读(74) 评论(0) 推荐(0)
摘要:题面 这题感觉思路比较正常。首先考虑化式子,原式需要在两棵树上分别求 \(lca\),这很不好。考虑把式子写成 \[ \frac{1}{2}\big(dis_1(x,y)+dep_1(x)+dep_1(y)-2\times dep_2(LCA_2(x,y)\big) \] 对于这个 \(dis_1\ 阅读全文
posted @ 2022-05-11 19:04 cunzai_zsy0531 阅读(58) 评论(0) 推荐(0)
摘要:题面 这题真的非常 nb! 如果我们不管这个加叶子的操作,只考虑统计答案:每一次统计和点 \(i\) 能够成对的个数。这个可以用点分树做。注意到那个条件 \(dist(i,j)\leq r_i+r_j\) 相当于 \(dist(i,l)-r_i\leq r_j-dist(j,l)\),每个点统计到这 阅读全文
posted @ 2022-05-11 19:01 cunzai_zsy0531 阅读(95) 评论(0) 推荐(0)
摘要:题面 设 \(sum_u\) 为 \(u\) 子树内 \(d\) 的和,\(sum_d\) 和 \(sum_ch\) 意义是常见点分树容斥,记录子树内 \(d\times dist\) 的和。 首先注意一个性质:假设当前答案为 \(u\),那么如果 \(u\) 的某个儿子 \(v\) 的答案更优,那 阅读全文
posted @ 2022-05-11 18:56 cunzai_zsy0531 阅读(45) 评论(0) 推荐(0)
摘要:题面 这个题没有修改操作,所以不需要开线段树。跟平常的动态点分治做法一样,每个点开两个 vector 按照 \(x_i\) 排序存储到这个点和到这个点在点分树父亲的距离。每次找一个点的时候,暴力跳点分树父亲,直接在 vector 上二分查找满足 \([l,r]\) 这个区间的点和距离,直接计算即可。 阅读全文
posted @ 2022-05-11 18:52 cunzai_zsy0531 阅读(61) 评论(0) 推荐(0)
摘要:题面 动态点分治模板题。考虑建出点分树来之后,在每个点开两棵动态开点线段树,以距离为下标,\(t1\) 记录的是 \(u\) 连通块内到 \(u\) 所有距离为 \(i\) 的点的权值和,\(t2\) 记录的是 \(u\) 连通块内到点分树上 \(u\) 的父亲 \(fa_u\) 所有距离为 \(i 阅读全文
posted @ 2022-05-11 18:50 cunzai_zsy0531 阅读(44) 评论(0) 推荐(0)
摘要:题面 从点分治训练题点过来的,发现可以用树形dp……具体做法就是说,设 \(f_{u,0/1/2}\) 表示点 \(u\) 的子树中(包含点 \(u\)),距离 \(\mod 3\) 值为 \(0/1/2\) 的点数。转移和求答案都是 \(O(1)\) 的,总复杂度 \(O(n)\)。 通过这个题可 阅读全文
posted @ 2022-05-11 18:48 cunzai_zsy0531 阅读(21) 评论(0) 推荐(0)
摘要:题面 感觉和板子差不多,但是仔细思考一下就会发现,用两个指针扫的时候很难维护 “不选某个子树”的最小值。这时候需要设计一个排序和贪心方案,使得能够使用模板那种双指针方式解决问题。 首先是几个定义:在对于某个根 \(rt\) 更新答案的时候,设 \(a[]\) 表示子树的所有点,\(b[]\) 表示每 阅读全文
posted @ 2022-05-11 18:45 cunzai_zsy0531 阅读(55) 评论(0) 推荐(0)
摘要:题面 原始式子是 \[ sum_{k,l,r}=\left\{ \begin{aligned} \sum_{i=l}^r a_i&,k=1\\ \sum_{i=l}^r\sum_{j=i}^rsum_{k-1,i,j}&,k\geq 2\\ \end{aligned} \right. \] 考虑求每 阅读全文
posted @ 2022-05-11 18:40 cunzai_zsy0531 阅读(82) 评论(0) 推荐(0)
摘要:题面 推式子+二项式定理+FFT。这个题需要一点生成函数的知识。 首先考虑前缀和,求一个多项式 \(F(x)\) 的前缀和相当于是卷上了一个系数全是 \(1\) 的多项式。即 \[ \begin{aligned} Sum(x)&=F(x)\times \sum_{i=0}^{\infty}x^i\\ 阅读全文
posted @ 2022-05-11 18:36 cunzai_zsy0531 阅读(51) 评论(0) 推荐(0)
摘要:题面 又是一道推式子+FFT。看到有些式子看起来很卷,不要犹豫,自信一点,说不定就推出来了呢。 设加的数为 \(x\),转完之后两个数组每一位对应为 \(a[1...n]\) 和 \(b[1...n]\),可得: 要求 \(\min\{\sum_{i=1}^{n}(a_i+x-b_i)^2\}\): 阅读全文
posted @ 2022-05-11 18:32 cunzai_zsy0531 阅读(24) 评论(0) 推荐(0)
摘要:题面 看这个题目的式子,好像就是最近学的库仑定律+电场强度??做法推式子FFT。 考虑首先通过 \(E_i=\frac{F_i}{q_i}\) 消掉原式中的一些量。得到: \[ E_i=\sum_{i=0}^j\frac{q_i}{(i-j)^2}-\sum_{i=j}^n\frac{q_i}{(i 阅读全文
posted @ 2022-05-11 18:30 cunzai_zsy0531 阅读(40) 评论(0) 推荐(0)
摘要:一棵树点有点权,支持换根、路径修改、查询子树最小值。\(n\leq 10^5\)。 这个换根其实就是,查询最小值的时候,判断一下查询点 \(x\) 相对于 \(root\) 的位置。如果 \(root\) 在 \(x\) 的子树里,就在 dfs 序里把 \(root\) 子树扣出去就行了。 我这个代 阅读全文
posted @ 2022-05-04 13:06 cunzai_zsy0531 阅读(49) 评论(2) 推荐(0)
摘要:分块之后,一定要注意你操作之后的数组并不是修改的区间! 点击查看代码 #include<cstdio> #include<iostream> #include<cstring> #include<queue> #include<stack> #include<algorithm> #include< 阅读全文
posted @ 2022-05-03 13:26 cunzai_zsy0531 阅读(23) 评论(0) 推荐(0)