CF1905E One-X
考虑在 \(n\) 个节点的树中,树根作为 \(lca\) 对答案的贡献,显然就是在左子树的叶子中选出一个非空集的方案乘上右子树的方案。
\]
进而得到一个 \(O(N)\) 的 \(dp\),其中 \(ls = \lceil \dfrac{n}{2} \rceil\),\(rs = \lfloor \dfrac{n}{2} \rfloor\)。
\]
观察状态参数,可以发现在一次求解中 \(id\) 有 \(O(N)\) 个,而 \(n\) 只有 \(O(\log N)\) 个,一个直观的想法是把 \(id\) 从状态方程中剥离出去。
不妨手玩一下这个式子。
dp(n, id) &= w(n, id) + dp(ls, 2\cdot id) + dp(rs, 2\cdot id + 1) \\
&= t(n) \cdot id + dp(ls, 2\cdot id) + dp(rs, 2\cdot id + 1) \\
&= t(n) \cdot id + t(ls) \cdot 2\cdot id + t(rs) \cdot (2\cdot id + 1) + (dp \ldots) \\
&= (t(n) + 2 \cdot t(ls) + 2 \cdot t(rs) + 4 \cdot \ldots) \cdot id + (t(rs) + \ldots)
\end{aligned}
\]
能够得到整个状态方程为 \(id\) 的一次函数,只需维护 \(k(n)\) 和 \(b(n)\) 就好了。
即
\]
由于
dp(n, id) &= t(n) \cdot id + dp(ls, 2\cdot id) + dp(rs, 2\cdot id + 1) \\
&= t(n) \cdot id + k(ls) \cdot 2\cdot id + b(ls) + k(rs) \cdot (2\cdot id + 1) + b(rd)
\end{aligned}
\]
所以
\]
\]
map<ll, pll> mp;
pll calc(ll n) {
if(mp.find(n) != mp.end()) return mp[n];
auto [lk, lb] = calc((n + 1) / 2);
auto [rk, rb] = calc(n / 2);
ll t = (q_pow(2, (n + 1) / 2) - 1) * (q_pow(2, n / 2) - 1) % P;
ll k = (t + 2 * lk + 2 * rk) % P;
ll b = (lb + rk + rb) % P;
/*
f[n][id] = t * id + f[ls][lsid] + f[rs][rsid]
*/
return mp[n] = {k % P, b % P};
}
void solve() {
ll n;
cin >> n;
auto [k, b] = calc(n);
cout << (k + b) % P << '\n';
}
int main() {
int T; cin >> T;
mp[1] = {1, 0};
while(T --) solve();
return 0;
}
ccf 赶紧支持 c++17。
随机推荐
- Loto实践干货(3) 测量CAN总线通讯数据
Loto实践干货(3) 测量CAN总线通讯数据 最近在做运动控制卡的项目,调试样机的过程中,需要验证CAN总线通讯功能的正确性.以前只限于理论上认识CAN总线,使用的CANbus的通讯卡也是有上位机例 ...
- C#文件加密解密
加密后内容 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.D ...
- PLC:自动纠正数据集噪声,来洗洗数据集吧 | ICLR 2021 Spotlight
论文提出了更通用的特征相关噪声类别PMD,基于此类噪声构建了数据校准策略PLC来帮助模型更好地收敛,在生成数据集和真实数据集上的实验证明了其算法的有效性.论文提出的方案理论证明完备,应用起来十分简单 ...
- CSS设置图片根据div的大小等比例缩放
1 .img{ 2 position: absolute; 3 background:url("../images/success.png") no-repeat; 4 width ...
- HTTP Web安全
验证安全机制 会话管理机制 SQL注入原理 SELECT * FROM test.user WHERE username='' or 1='1' and password='anyxxxxx'; 当u ...
- JS前后端交互(1)项目BotBattle
目录 交互逻辑图解 后端 前端 jQuery的ajax的编程 项目地址 交互逻辑图解 图片来源:XZHongAN 后端 RequestMapping("/pk/") public ...
- 劫持TLS绕过canary pwn89
劫持TLS绕过canary pwn88 首先了解一下这个东西的前提条件和原理 前提: 溢出字节够大,通常至少一个page(4K) 创建一个线程,在线程内栈溢出 原理: 在开启canary的情况下,当程 ...
- 两个专栏帮你搞定【图像拼接(image stitching)】
[图像拼接论文精读]专栏:图像拼接论文精读 [图像拼接源码精读]专栏:图像拼接论文源码精读 前言 图像拼接(image stitching)是计算机视觉中的高级图像处理手段,是一个小众方向,研究的人很 ...
- VMware下CentOS7.6安装openGauss
VMware 下 CentOS7.6(7.9)安装 openGauss centos 安装 这里我使用的是 vmware workstation Pro 15 虽然官网了解了一下 openGauss ...
- openGauss内存引擎中的索引
一.索引 索引是一种用于快速查询和检索数据的数据结构.常见的索引结构有: B 树, B+树和 Hash. 索引的作用就相当于目录的作用.打个比方: 我们在查字典的时候,如果没有目录,那我们就只能一页一 ...