link。

考虑把原问题写成一个在 \(\left(\log_2 \max v \right) \times n\) 的矩阵里选出三列,我们首先预处理出 \(j \cap q\)。具体,我们需要对于每一个权值 \(v\) 求出一个最大的下标 \(p\)(\(1 \leqslant p \leqslant n\))满足存在极大的 \(q < p\) 且 \(v \cap a_p \cap a_q = v\),即 \(v \subseteq \left(a_p \cap a_q\right)\),这个可以做一个二元组 dp,即设 \(f_v\) 为对于 \(v\) 而言的答案,注意到 \(p\) 和 \(q\) 的实际意义是「满足左右两边存在有一个位置做并操作后是 \(v\) 的超集的位置下标」的最大值和次大值,所以更新答案是容易的。

考虑如何转移。对于一个左闭右开区间 \([0, 2^n)\),我们分治求出 \([0, 2^{n-1})\) 和 \([2^{n-1}, 2^n)\) 的 dp,当然左边区间的 dp 值不会对右边区间产生影响,所以我们考虑右边区间对左边区间的影响。\(\forall i \in [l, m)\),我们需要从 \(i\) 的超集转移到 \(i\),因为在 dp 时我们实际上是把所有贡献放到一个点上,又注意到 \(i-l+m\) 和 \(i\) 的关系就是二进制意义下多了一个最高位的 \(1\),所以只需要从 \(i-l+m\) 转移到 \(i\) 即可(有点谜语,但就这样吧)。

然后就贪心取最高位,挨个取 max 就行了。

int n, a[1000100], qwq;
pii dp[3000100];
pii upd(const pii& x, const pii& y) {
if (x.first > y.first) {
return pii(x.first, max(y.first, x.second));
}
else {
return pii(y.first, max(x.first, y.second));
}
}
void sos_dp(int l, int r) {
if (r-l == 1) {
return;
}
int mid = (l+r)/2;
sos_dp(l, mid), sos_dp(mid, r);
for (int i=l; i<mid; ++i) {
dp[i] = upd(dp[i], dp[i-l+mid]);
}
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for (int i=1; i<=n; ++i) {
cin >> a[i];
dp[a[i]] = upd(dp[a[i]], pii(i, 0));
}
qwq = 1;
for (int up=*max_element(a+1, a+n+1); (1<<qwq) <= up;) {
qwq++;
}
sos_dp(0, 1<<qwq);
int ans = 0;
for (int i=1; i<=n; ++i) {
int offset = 0;
bool f = 0;
for (int j=qwq; j>=0; --j) {
if (~(a[i]>>j)&1 && dp[offset|(1<<j)].second > i) {
offset |= 1<<j, f = 1;
}
}
if (dp[offset].second > i) {
f = 1;
}
if (f) {
cmax(ans, a[i]|offset);
}
}
cout << ans << "\n";
}

「codeforces - 1208F」Bits and Pieces的更多相关文章

  1. 「Codeforces 79D」Password

    Description 有一个 01 序列 \(a_1,a_2,\cdots,a_n\),初始时全为 \(0\). 给定 \(m\) 个长度,分别为 \(l_1\sim l_m\). 每次可以选择一个 ...

  2. 「Codeforces 468C」Hack it!

    Description 定义 \(f(x)\) 表示 \(x\) 的各个数位之和.现在要求 \(\sum_{i=l}^rf(i)\bmod a\). 显然 ans=solve(l,r)%a; if(a ...

  3. 「Codeforces 724F」Uniformly Branched Trees

    题目大意 如果两棵树可以通过重标号后变为完全相同,那么它们就是同构的. 将中间节点定义为度数大于 \(1\) 的节点.计算由 \(n\) 个节点,其中所有的中间节点度数都为 \(d\) 的互不同构的树 ...

  4. 「CodeForces 581D」Three Logos

    BUPT 2017 Summer Training (for 16) #3A 题意 给你三个矩形,需要不重叠不留空地组成一个正方形.不存在输出-1,否则输出边长和这个正方形(A,B,C表示三个不同矩形 ...

  5. 「CodeForces - 50C 」Happy Farm 5 (几何)

    BUPT 2017 summer training (16) #2B 题意 有一些二维直角坐标系上的整数坐标的点,找出严格包含这些点的只能八个方向走出来步数最少的路径,输出最少步数. 题解 这题要求严 ...

  6. 「CodeForces - 598B」Queries on a String

    BUPT 2017 summer training (for 16) #1I 题意 字符串s(1 ≤ |s| ≤ 10 000),有m(1 ≤ m ≤ 300)次操作,每次给l,r,k,代表将r位置插 ...

  7. 「CodeForces - 717E」Paint it really, really dark gray (dfs)

    BUPT 2017 summer training (for 16) #1H 题意 每个节点是黑色or白色,经过一个节点就会改变它的颜色,一开始在1节点.求一条路径使得所有点变成黑色. 题解 dfs时 ...

  8. 「CodeForces 476A」Dreamoon and Stairs

    Dreamoon and Stairs 题意翻译 题面 DM小朋友想要上一个有 \(n\) 级台阶的楼梯.他每一步可以上 \(1\) 或 \(2\) 级台阶.假设他走上这个台阶一共用了 \(x\) 步 ...

  9. 「CodeForces 546B」Soldier and Badges 解题报告

    CF546B Soldier and Badges 题意翻译 给 n 个数,每次操作可以将一个数 +1,要使这 n 个数都不相同, 求最少要加多少? \(1 \le n \le 3000\) 感谢@凉 ...

  10. 「codeforces - 1284G」Seollal

    给定 \(n\times m\) 的网格图,有些格子有障碍,无障碍且相邻的格子之间连边形成图.保证 \((1, 1)\) 无障碍,保证无障碍格子连通. 将网格图黑白染色,相邻格子颜色不同,\((1, ...

随机推荐

  1. kprobe_events shell模式使用教程

    kprobe_events shell模式使用教程 kprobe 使用前提 需要内核启用以下配置 CONFIG_KPROBES=y CONFIG_HAVE_KPROBES=y CONFIG_KPROB ...

  2. 使用 Docker 分析高通量测序数据

    端午节假期,先祝各位 Bio IT 的爱好者们,节日快乐! 做生信的童鞋想要学习 Docker,或者使用 Docker+Pipeline 封装自己的一套数据分析流程,相信一定不能错过胡博强老师在201 ...

  3. 生信入门必须掌握的 30 个 Linux 命令

    学习生物信息,Linux 是必须掌握的内容,其实常用的 Linux 命令也就 30 个左右,而且这些命令都是单词的简写,记忆起来并不困难.这里列出了常用的 30 个命令. 1. cd Change d ...

  4. Spring Cloud灰度部署

    1.背景(灰度部署) 在我们系统发布生产环境时,有时为了确保新的服务逻辑没有问题,会让一小部分特定的用户来使用新的版本(比如客户端的内测版本),而其余的用户使用旧的版本,那么这个在Spring Clo ...

  5. Spring源码核心剖析

    前言 SpringAOP作为Spring最核心的能力之一,其重要性不言而喻.然后需要知道的是AOP并不只是Spring特有的功能,而是一种思想,一种通用的功能.而SpringAOP只是在AOP的基础上 ...

  6. 【C#/.NET】使用Automapper映射record类型

    ​ 当使用Automapper进行对象映射时,通常我们会使用POCO(Plain Old CLR Object)类作为源对象和目标对象.然而,自从C# 9引入了record类型,它们提供了更简洁.不可 ...

  7. 好用到飞起的新项目「GitHub 热点速览」

    虽然本周 GitHub 热榜都是一些熟悉的面孔,但还是有不少新开源的项目,比如受启发于 Stripe IDs 的 UUIDv7 扩展 typeid,相信有了它,数据标识问题就迎刃而解了.此外,还有刚开 ...

  8. gitlab配置环境及pycharm配置

    一.gitlab介绍 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务 git.gitlab.GitHub的简单区别 git 是一种基于命令 ...

  9. 代码发布平台jenkins中Check-out Strategy选项功能意义

    第一个选项:Use'svn update' as much as possible  这个选项能实现快速发布:Use 'svn update' whenever possible, making th ...

  10. RTC+AI|“即智”数智人创新内容生产体验,为企业降本增效再提速

    号称"史上最卷"的618年中大促落下帷幕,几大电商巨头在直播投入和短视频内容建设上持续加码,短视频+直播电商的营销模式成为618期间的主要输出. 以某美妆专场直播间为例,主播现场手 ...