CF1208F Bits And Pieces
CF1208F Bits And Pieces
思路
这里要运用SOS-DP的思路(\(\text{Sum over Subsets}\))。我在另外一篇博客里介绍过,如有需要可以搜索一下我的博客。
SOS-DP是记录每个\(mask\)所有子集的信息,而这道题只需要记录每个\(mask\)所有超集的信息即可。\(dp[mask]\)记录的是能满足\(mask\)是其的子集的所有数中坐标最大的两个。我们枚举\(a_i\),然后贪心的按位取就可以了。具体细节可以看代码。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn (int)(5194304)
using namespace std;
int n,a[maxn],mi=0;
struct gg{
int key1,key2;
gg(int k1=0,int k2=0){key1=k1,key2=k2;}
}dp[maxn];
void insert(int num,int val){
if(val>dp[num].key1){
dp[num].key2=dp[num].key1;
dp[num].key1=val;
}
else if(val>dp[num].key2){
dp[num].key2=val;
}
return;
}
void init(){
for(int i=1;i<=n;i++)insert(a[i],i);
for(int i=0;i<=22;i++){
for(int j=0;j<=2e6;j++){
if((1<<i)&j){
insert((1<<i)^j,dp[j].key1);
insert((1<<i)^j,dp[j].key2);
}
}
}
}
bool test(int mask,int num){
if(dp[mask].key2>=num)return 1;
return 0;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
init();
for(int i=1;i<=n-2;i++){
int check=0;
for(int j=21;j>=0;j--){
if((1<<j)&a[i])continue;
if(test(check^(1<<j),i))check^=(1<<j);
}
mi=max(mi,check|a[i]);
}
printf("%d",mi);
return 0;
}
参考资料
CodeForces -1208F Bits And Pieces

CF1208F Bits And Pieces的更多相关文章
- Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2) F. Bits And Pieces sosdp
F. Bits And Pieces 题面 You are given an array
- Codeforces 1208F Bits And Pieces 位运算 + 贪心 + dp
题意:给你一个序列a, 问a[i] ^ (a[j] & a[k])的最大值,其中i < j < k. 思路:我们考虑对于每个a[i]求出它的最优解.因为是异或运算,所以我们从高位向 ...
- Codeforces F. Bits And Pieces(位运算)
传送门. 位运算的比较基本的题. 考虑枚举\(i\),然后二进制位从大到小考虑, 对于第\(w\)位,如果\(a[i][w]=1\),那么对\(j.k\)并没有什么限制. 如果\(a[i][w]=0\ ...
- Codeforces 1208F - Bits And Pieces(高维前缀和)
题面传送门 题意:求 \(\max\limits_{i<j<k}a_i|(a_j\&a_k)\). \(1\leq n \leq 10^6,1\leq a_i\leq 2\time ...
- [算法模板]SOS DP
[算法模板]SOS DP 正文 SOS-DP(\(\text{Sum over Subsets}\))是用来解决这样的问题的: 其实就是子集和DP.上面每个\(F[mask]\)里面包含了\(mask ...
- 分享20个最新的免费 UI 设计素材给设计师
用户界面设计涉及到很多的创意,灵感以及需要与客户进行有效沟通的技能.良好的用户界面是一致的,可以使网站更容易理解和使用.UI设计的重点在于用户体验和互动,同时易于使用对于一个成功的移动应用程序来说非常 ...
- 《The Elder Scrolls V: Skyrim》百般冷门却强力职业
<The Elder Scrolls V: Skyrim>百般冷门却强力职业 1.有如成龙平常的杂耍型战斗窃贼 每次看帖都察觉大伙一贯在强调窃贼不需要防御,窃贼不需要血,窃贼就是一击致命, ...
- Programming Entity Framework 翻译(2)-目录2-章节
How This Book Is Organized 本书组织结构 Programming Entity Framework, Second Edition, focuses on two ways ...
- Computer Graphics Research Software
Computer Graphics Research Software Helping you avoid re-inventing the wheel since 2009! Last update ...
随机推荐
- python实现ldap接入
需要提前安装python-ldap模块 python接入ldap其实分了几个步骤: 1.使用一个管理员账户登陆到ldap 2.使用一个字段值是唯一的字段,去搜索到要验证用户的DN值(ldap搜索到的单 ...
- C#通过字符串分割字符串Split
string[] strArr = str.Split(new[] {"****==="},StringSplitOptions.None); 更多内容关注公众号 洛水梅家
- Zabbix+Grafana打造高逼格监控系统
第一章 zabbix监控的意义 1.1 为什么要监控 业务安全性的保障 系统的保障 产品持续性的运行 1.2 监控的内容 1.3 zabbix的选择性 [x] 纯命令监控太局限性 [x] 监控三剑客( ...
- Sublimetext3运行Python及python交互环境配置(便捷大法)
1.首先安装Sublimetext3 安装路径保持默认,点击下一步直到安装完成. 2.安装Python 安装步骤参考百度:https://baijiahao.baidu.com/s?id=160657 ...
- 浅析负载均衡的6种算法,Ngnix的5种算法
常见的几种负载均衡算法 1.轮询法 将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载. 2.随机法 通过系统的随机算法,根据后端服务器的 ...
- Qt keyevent学习笔记
在按下一个键不放后,会发生: 1.触发keypressevent(),此时isautorepeat()返回false: 2.set isautorepeat(),使其返回值为true; 3.触发key ...
- android studio学习----构建(gradle )依赖时使用动态依赖的问题
今天在看Dan Lew大神的博客发现最新的文章就是 “Don't use dynamic versions for your dependencies” Everyone, please, to st ...
- 打包工具webpack和热加载深入学习
本次小编呢,为大家带来一篇深入了解打包工具 webpack. 我们今天使用的是 webpack3.8.1版本的,我们学习使用 3.8.1更稳定些,并学习自己如何配置文件,最新版本不需要自己配置文件,但 ...
- 使用脚本安装elasticsearch7.3的记录
使用脚本安装elasticsearch7.3的记录 #!/bin/sh # https://www.elastic.co/guide/en/elasticsearch/reference/curren ...
- Spark实现分组TopN
一.概述 在许多数据中,都存在类别的数据,在一些功能中需要根据类别分别获取前几或后几的数据,用于数据可视化或异常数据预警.在这种情况下,实现分组TopN就显得非常重要了,因此,使用了Spark聚合函数 ...