Gravatar
op_组撒头屯
积分:2982
提交:327 / 662

“引爆逆天力量,追寻圆环之理的神藏奥秘”系列再现高手。

首先最终的树的点数可以达到 $10^{10}$ 级别,我们肯定不能真正把树建出来。

但是注意到我们可以只保留每个复制出的子树的根(记作关键点),那么这些根也构成一棵树,这样就好办了。

当询问 $dis(x,y)$ 时,我们先找到 $x$ 和 $y$ 分别从属于的关键点,并求出它们在关键点树上的距离,而这是容易预处理的。需要注意的是,在 lca 处涉及同一关键点范围内的距离,在原树上查其距离即可。

以及,在定位点时,涉及查询原树某棵子树内编号第 $k$ 大的点,把树拍成 dfn 序后主席树上二分即可。

时间复杂度 $O(n\log n)$,有点难写。


题目2052  [HNOI 2016] 树      5      2 条 评论
2023-12-21 22:09:47    
Gravatar
op_组撒头屯
积分:2982
提交:327 / 662

给一个线性做法。

我们依次计算每个字符的最小值,采用双指针维护。

具体的,记当前字符为 $c$,维护两个指针 $l,r$,表示第 $l$ 个 $c$ 到第 $r$ 个 $c$ 能否全部并到一起。若可以就 $r$ 右移,否则 $l$ 右移。

问题转化为将区间 $[l,r]$ 全部并到一起的最小代价。注意到最优方案中一定有一个点不动,它两侧的点向它靠拢,我们再维护一个指针 $mid$ 表示这个点,那么当前代价为

$$\sum_{i=l}^{mid-1}{[(p_{mid}-mid+i)-p_i]}+\sum_{i=mid+1}^r{[p_i-(p_{mid}+i-mid)]}$$

$$=\sum_{i=l}^{mid-1}{(p_i-i)}-\sum_{i=mid+1}^{r}{(p_i-i)}-(r-mid)(p_{mid}-mid)+(mid-l)(p_{mid}-mid)$$

其中 $p_i$ 表示第 $i$ 个 $c$ 的下标。注意到我们预处理 $p_i-i$ 的前缀和即可 $O(1)$ 算出这个式子。

注意到这个式子关于 $mid$ 是下凸的,当 $l$ 和 $r$ 右移时,最优的 $mid$ 也是单调右移的,我们在双指针的同时维护 $mid$ 即可。

由于三个指针都单调右移,时间复杂度为 $O(L)$。


题目3942  收集弹珠      7      评论
2023-11-15 18:26:01    
Gravatar
op_组撒头屯
积分:2982
提交:327 / 662

“引爆逆天力量,追寻圆环之理的神藏奥秘”最新力作。

乍一看这式子感觉纯纯逆天,这种带位运算的复杂式子肯定考虑拆位。记 $w_{i,j,k}$ 为 $d_{i,j}\oplus a_{i,j}$ 的第 $k$ 位,$w_{e,k}$ 为 $d_u \oplus d_v$ 的第 $k$ 位,化一下式子

$$ans=\sum_i \sum_j \sum_k {w_{i,j,k}b_{i,j}} + \sum_e \sum_k {w_{e,k}c_e} = \sum_k{2^k(\sum_i \sum_j {w_{i,j,k}b_{i,j}} + \sum_e {w_{e,k}c_e})}$$

此时也能看出 $d$ 的每一位是相互独立的,于是我们分开算,考虑每一位的最小值。

显然可以状压 dp,记 $f_{i,S}$ 表示第 $i$ 列填的状态为 $S$,前 $i$ 列的最小值。

转移直接枚举上一列填了什么即可,再加上三个代价:第 $i$ 列的点,第 $i$ 列的边,第 $i$ 列和第 $i-1$ 列之间的边。

时间复杂度 $O(m4^n\log V)$,理论上界大概是 $2e8$,然而最慢的点也不到 $800ms$,很神奇吧常数。





题目3113  [BZOJ 4676] Xor-Mul 棋盘      9      评论
2023-11-14 19:14:02    
Gravatar
op_组撒头屯
积分:2982
提交:327 / 662

“引爆逆天力量,追寻圆环之理的神藏奥秘”第二作!

考虑将期望得分拆到每对点对上,也就等于选中每对点对的概率之和。而选中某对点对的概率显然都是相同的,于是直接用点分治统计好的点对的数量,再乘以概率即可。

概率是多少?记当前这个人要选 $c$ 个点,相当于 $n$ 个位置中有 $c$ 个特殊的,而两个点都放在特殊位置的概率,即 $p=\frac{c(c-1)}{n(n-1)}$。

时间复杂度 $O(n\log n)$。注意分母别爆 int 了。


题目3112  [BZOJ 4675] 点对游戏      8      评论
2023-11-14 18:52:42    
Gravatar
op_组撒头屯
积分:2982
提交:327 / 662

开个新坑,系列名叫“引爆逆天力量,追寻圆环之理的神藏奥秘”(来源:ChatGPT3.5)。

对于树上所有两点距离的问题,考虑点分治。记当前分治中心为 $C$,对于在分治范围内的点 $u$,考虑计算所有经过 $C$ 的路径对 $u$ 的贡献。记 $f_i$ 表示与 $C$ 距离为 $i$ 的点的个数,若 $u$ 与 $C$ 的距离为 $d$,那么对 $u$ 的贡献为

$$\Delta_u=\sum_{i=0}^{D}{f_i w_{i+d}}$$

其中 $D$ 为分治范围到 $C$ 的最大距离。注意到这是一个差卷积的形式,处理方式是将 $f$ 倒置,即 $f'_i=f_{D-i}$,那么有

$$\Delta_u=\sum_{i=0}^{D}{f'_{D-i} w_{i+d}}=[x^{D+d}](\sum_{i}{f'_i x^i})(\sum_{i}{w_i x^i})$$

使用 NTT 计算卷积即可。然后再类似的减去 $u$ 所属子树对它的贡献。

注意到卷积只用计算前 $2D$ 位,这样就可以保证复杂度为 $O(n\log^2 n)$。以及答案最大 $1e9$,NTT 质数可以取 $1004535809$,原根为 $3$。






题目3176  树上的距离      10      评论
2023-11-13 19:13:25    
Gravatar
op_组撒头屯
积分:2982
提交:327 / 662

用事实证明“超级无敌神仙炫酷无敌原神大王”豪华套餐不只有推式子和大ds!


第一问是简单的,记 $f_i$ 为以 $i$ 结尾的最多旧房子数,有

$$f_i=\max_{j\lt i,a_j \le a_i}{f_j+1}$$

其中 $a_i=A_i-i$,容易用线段树维护。


考虑第二问,记 $g_i$ 为以 $i$ 结尾的最小花费,显然两个旧房子中间应该从前者开始递增建,同时要保证第一问最大,有

$$g_i=\min_{j\lt i,a_j\le a_i,f_j+1=f_i}\{g_j+\frac{(2a_j+i+j)*(i-j-1)}{2}+b_i\}$$

其中 $b_i=A_i+B_i$。暴力转移可以拿 $40pts$。

注意到可以斜率优化,化一下式子,

$$j^2+(2a_j+1)j-2g_j=2(i-1)a_j+i(i-1)+b_i-2g_i$$

横坐标 $a_j$,纵坐标 $j^2+(2a_j+1)j-2g_j$,斜率 $2(i-1)$,维护上凸包。

然而转移条件有三个,$f_j+1=f_i$ 直接分层转移解决,剩下的是一个类似二位偏序的限制,考虑 cdq分治。

具体的,记当前转移 $f_i=d$ 的位置,当前分治区间为 $[l,r]$。考虑 $[l,mid]$ 中 $f_j=d-1$ 的位置对 $[mid+1,r]$ 中 $f_i=d$ 的位置的贡献,显然所有 $j\lt i$ 都满足,而对于 $a_j\le a_i$ 的限制,将两部分按 $a$ 升序排序后,使用双指针维护凸包即可。

时间复杂度 $O(n\log^2 n)$。记得对区间内没有有效位置的情况剪枝。



题目1859  [国家集训队2011]拆迁队      8      评论
2023-11-07 17:54:02