当前位置: 首页 > 网络知识

[luoguP2146] 软件包管理器(树链剖分)

时间:2026-01-29 09:28:08

传送门

看着很吓人,其实就是个树链剖分模板。

可支持操作:

1.将节点 x 到 根 的路径上的值都变成 1

2.将以节点 x 为根的子树的值都变成 0

1A爽~

——代码

1 #include <cmath> 2 #include <cstdio> 3 #include <cstring> 4 #include <iostream> 5 #define root 1, 1, n 6 #define ls now << 1, l, mid 7 #define rs now << 1 | 1, mid + 1, r 8 9 const int MAXN = 1000001; 10 int n, m, cnt, tim, ans; 11 int head[MAXN], to[MAXN], next[MAXN]; 12 int f[MAXN], son[MAXN], size[MAXN], deep[MAXN], tid[MAXN], top[MAXN], sum[MAXN << 2], turn[MAXN << 2]; 13 14 inline int read() 15 22 23 inline void add(int x, int y) 24 29 30 inline void dfs1(int u) 31 42 } 43 44 inline void dfs2(int u, int tp) 45 55 } 56 57 inline void swap(int &x, int &y) 58 61 62 inline void pushup(int now) 66 67 inline void pushdown(int now, int len) 68 76 77 inline void update(int x, int ql, int qr, int now, int l, int r) 78 86 if(r < ql || l > qr) return; 87 pushdown(now, r l + 1); 88 int mid = (l + r) >> 1; 89 update(x, ql, qr, ls); 90 update(x, ql, qr, rs); 91 pushup(now); 92 } 93 94 inline void qupdate(int x, int u, int v) 95 102 if(deep[u] > deep[v]) swap(u, v); 103 update(x, tid[u], tid[v], root); 104 } 105 106 int main() 107 120 dfs1(0); 121 dfs2(0, 0); 122 m = read(); 123 for(i = 1; i <= m; i++) 124 132 return 0; 133 }
View Code



上一篇:[luoguP3572] [POI2014]PTA-Little Bird(DP + 单调队列)
下一篇:[luoguP1440] 求m区间内的最小值(单调队列 || 线段树)
树链剖分 线段树
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素