尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

题解:Luogu P14522 【MX-S11-T3】空之碎物

题解:Luogu P14522 【MX-S11-T3】空之碎物
📅 发布时间:2026/6/19 0:21:07

题意

定义 \(\ominus\) 为二进制不退位减法。对于一个可重集 \(S\),你可以进行若干次操作,每次操作可以选择 \(S\) 中的两个数 \(x,y\),合并成 \(x\ominus y\) 或 \(y\ominus x\)。定义 \(f(S)\) 为将 \(S\) 合并至只剩一个数时,该数的最大可能值。

现在给定长度为 \(n\) 的序列 \(a\),求 \(\sum\limits_{i=1}^n\sum\limits_{j=i}^nf(a_{i\sim j})\),答案对 \(998244353\) 取模。\(1\leq n\leq 2\times 10^5\),\(0\leq a_i<2^{25}\)。

题解

好难啊。

比较难注意到 \((x\ominus y)\ominus z\leq x\ominus(y\ominus z)\),放到表达式树上考虑,若其左链长度 \(>2\),则我们总可以通过做一次左旋使得结果不减,因此最终左链长度 \(\leq 2\)。而对于根节点的右子树对应的表达式,我们当然希望其值尽可能小,于是类似地,我们总可以通过右旋使得右子树的右链长度 \(\leq 2\)。这意味着,最优的表达式一定形如 \(x\ominus(y\ominus a_1\ominus\cdots\ominus a_{n-2})\),其中 \(x,y\) 为 \(S\) 中的两个数,\(a_{1\sim n-2}\) 为剩下的数。

注意到 \(x\ominus y=x\operatorname{and}\neg y=x-(x\operatorname{and}y)\),所以 \(x\ominus(y\ominus a_1\ominus\cdots\ominus a_{n-2})=x-(x\operatorname{and}y\operatorname{and}\neg v)\),其中 \(v\) 为 \(S\) 中剩余数的按位或和。一个观察是,当 \(|S|\geq \log{V}+2\) 时,\(f(S)\) 一定能取到 \(\max(S)\)。

证明

取 \(x=\max(S)\),考虑怎样的 \(y\) 会使得 \(f(S)\) 取不到 \(\max(S)\),发现其实就是存在某一位,使得 \(x\) 在该位上为 \(1\),且 \(S-\{x\}\) 中只有 \(y\) 在这一位上为 \(1\)。而至多产生 \(\log{V}\) 个不能选择的 \(y\),所以当 \(|S|\geq \log{V}+2\) 时,一定能选出一个合适的 \(y\) 使得 \(f(S)=\max(S)\)。\(\Box\)

有了这个结论,\(|S|\geq \log{V}+2\) 的情况就很容易处理了,用单调栈求出 \(a\) 的所有区间最大值之和,然后暴力减去 \(|S|<\log{V}+2\) 对应的区间最大值之和即可。这部分时间复杂度为 \(\mathcal{O}(n\log{V})\)。

接下来考虑 \(|S|<\log{V}+2\) 的情况。暴力枚举短区间,枚举其中一个数作为 \(x\),预处理前后缀按位或和,还有以 \(x\) 为左右端点的区间按位或和,这样再枚举 \(y\) 既可以 \(\mathcal{O}(1)\) 计算出 \(x\ominus(y\ominus a_1\ominus\cdots\ominus a_{n-2})\) 的值。时间复杂度为 \(\mathcal{O}(n\log^3{V})\),无法通过。

考虑优化。一个很牛的结论是,\(x\) 必然取 \(S\) 的最大值或次大值。

证明

\(|S|\leq 2\) 时结论显然正确,下面讨论 \(|S|\geq 3\) 的情况。

反证法。设 \(mx,smx\) 分别为 \(S\) 的最大值和次大值,假设存在 \(p<smx\) 使得 \(f(S)\) 取到最大值。可以发现,若某一位上 \(1\) 的出现次数 \(\geq 3\),则这一位一定能在最终结果中取到 \(1\)。于是考察 \(mx,smx,p\) 在二进制表示下的 LCP 的后一位,则 \(mx\) 在这一位上必然为 \(1\),\(p\) 在这一位上必然为 \(0\)。而不管 \(smx\) 在该位上为 \(0\) 还是 \(1\),我们总可以取 \(x=mx,y=p\),使得最终结果在该位上取到 \(1\),从而使得 \(f(S)\) 取到更大的值,矛盾。\(\Box\)

这样复杂度降至 \(\mathcal{O}(n\log^2{V})\),可以通过。

代码
#include <bits/stdc++.h>using namespace std;#define lowbit(x) ((x) & -(x))
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<int, int> pii;
const int N = 2e5 + 5, MOD = 998244353;template<typename T> inline void chk_min(T &x, T y) { x = min(x, y); }
template<typename T> inline void chk_max(T &x, T y) { x = max(x, y); }
inline int add(int x, int y) { return x += y, x >= MOD ? x - MOD : x; }
inline int sub(int x, int y) { return x -= y, x < 0 ? x + MOD : x; }
inline void cadd(int &x, int y) { x += y, x < MOD || (x -= MOD); }
inline void csub(int &x, int y) { x -= y, x < 0 && (x += MOD); }int n, cur, ans, a[N];
int top, stk[N];
int pre1[N], suf1[N], pre2[N], suf2[N];int calc(int l, int r, int x) {pre1[l - 1] = suf1[r + 1] = pre2[x] = suf2[x] = 0;for (int i = l; i <= x; ++i) pre1[i] = pre1[i - 1] | a[i];for (int i = x + 1; i <= r; ++i) pre2[i] = pre2[i - 1] | a[i];for (int i = r; i >= x; --i) suf1[i] = suf1[i + 1] | a[i];for (int i = x - 1; i >= l; --i) suf2[i] = suf2[i + 1] | a[i];int res = 0, v = a[x];for (int i = l; i < x; ++i) chk_max(res, v - (v & a[i] & ~(pre1[i - 1] | suf2[i + 1] | suf1[x + 1])));for (int i = x + 1; i <= r; ++i) chk_max(res, v - (v & a[i] & ~(pre1[x - 1] | pre2[i - 1] | suf1[i + 1])));return res;
}int main() {ios::sync_with_stdio(0), cin.tie(0);cin >> n;for (int i = 1; i <= n; ++i) {cin >> a[i];while (top && a[stk[top]] <= a[i]) csub(cur, (ll)a[stk[top]] * (stk[top] - stk[top - 1]) % MOD), --top;stk[++top] = i, cadd(cur, (ll)a[i] * (i - stk[top - 1]) % MOD);cadd(ans, cur);}for (int l = 1; l <= n; ++l) for (int r = l, mx = 0, smx = 0; r <= min(l + 25, n); ++r) {if (!mx || a[r] >= a[mx]) smx = mx, mx = r;else if (!smx || a[r] >= a[smx]) smx = r;if (l < r) csub(ans, a[mx]), cadd(ans, max(calc(l, r, mx), calc(l, r, smx)));}cout << ans;return 0;
}

相关新闻

  • 1088. Rational Arithmetic (20)
  • 解码UDP
  • 2025中山办公场地租赁优选:中山西区金嘉创新港,一站式创业空间,赋能企业成长新机遇

最新新闻

  • 深入解析T1023RDB开发板:从Power Architecture核心到高速接口的硬件设计实战
  • 如何实现Windows内核级硬件伪装:EASY-HWID-SPOOFER完整指南
  • 每日算法快闪赛:提升你的编程实力
  • Mac百度网盘下载加速终极方案:三分钟实现SVIP级下载体验
  • 分布式黎曼优化算法在非欧数据中的应用与实现
  • 音乐歌词管理的新范式:163MusicLyrics如何重塑你的音乐体验

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号