AtCoder Regular Contest 164 E Segment-Tree Optimization
妙妙题。
我们考虑如何方便地描述一棵广义线段树。不难想到使用断点描述,即对于一个结点 ,它的左右儿子分别是 ,其中 ,然后把一层缩成一个 的序列,每一层都是上层对应结点的 ,这样每对相邻断点组成了每个区间。
要令深度最小,我们将题中每个区间都拆成两个断点 ,然后我们贪心地选择这些断点作为线段树的断点的一部分。设不同断点数量为 ,那么第一问的答案 可以轻易得知,就是最小的满足 的非负整数。因为第 层共有 个断点。
接下来我们考虑把这 个断点从小到大排成一个序列,易知下标为奇数的是第 层的断点。我们现在要最小化第 层的结点访问次数之和。
设第 层的一个断点在 中出现 次,可知这个断点对访问次数之和的贡献是 。因为这个断点两侧的区间各被访问 次。
然后我们可以 dp 了,设 为当前考虑到 层的所有断点中,第 个断点,有 个 中的断点被考虑,区间访问次数之和。根据上面得出的第 层断点出现次数乘 就是它对访问次数的贡献的结论,可以很容易地转移,考虑第 个断点是否是 中地断点即可。注意若第 个断点不是第 层的断点,即 为偶数,就对访问次数没有贡献。
时间复杂度 。
code
// Problem: E - Segment-Tree Optimization // Contest: AtCoder - AtCoder Regular Contest 164 // URL: https://atcoder.jp/contests/arc164/tasks/arc164_e // Memory Limit: 1024 MB // Time Limit: 2000 ms // // Powered by CP Editor (https://cpeditor.org) #include <bits/stdc++.h> #define pb emplace_back #define fst first #define scd second #define mems(a, x) memset((a), (x), sizeof(a)) using namespace std; typedef long long ll; typedef unsigned long long ull; typedef double db; typedef long double ldb; typedef pair<int, int> pii; const int maxn = 4040; int n, m, f[maxn << 1][maxn], a[maxn], tot; map<int, int> mp; void solve() { scanf("%d%d", &n, &m); for (int i = 0, l, r; i < m; ++i) { scanf("%d%d", &l, &r); if (l > 1) { ++mp[l - 1]; } if (r < n) { ++mp[r]; } } for (pii p : mp) { a[++tot] = p.scd; } int d = 0; for (d = 0;; ++d) { if ((1 << d) - 1 >= tot) { break; } } printf("%d ", d); if (d == 0) { printf("%d\n", m); return; } mems(f, 0x3f); f[0][0] = 0; for (int i = 1; i < (1 << d); ++i) { for (int j = 0; j <= tot; ++j) { f[i][j] = f[i - 1][j]; if (j) { f[i][j] = min(f[i][j], f[i - 1][j - 1] + ((i & 1) ? a[j] : 0)); } } } printf("%d\n", f[(1 << d) - 1][tot] * 2); } int main() { int T = 1; // scanf("%d", &T); while (T--) { solve(); } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
2022-07-11 AtCoder AGC043C Giant Graph
2022-07-11 CodeForces 1677D Tokitsukaze and Permutations