Codeforces 1208F Bits And Pieces
题目描述
You are given an array a of n integers.
You need to find the maximum value of ai|(aj&ak) over all triplets (i,j,k) such that i<j<k.
大意
给你一个包含n个整数的序列a
你要在所有满足i<j<k的三元组中找到最大的ai|aj&ak
3<=n<=106
0<=a[i]<=2*106
题解
一,位运算
|指的是二进制后的按位或
如 2|5=7,7|9=15
&指的是二进制后的按位且
如 3&2=2,13&10=8
二、题目
说完了简单的位运算,我们正式进入主题
“按位或”有个特点,就是如果一个数当前位置上是1,则结果当前位置上也一定是1
看上去好废话啊
这样的话,我们就可以枚举更方便确定的a[i]
我们不妨定义a[j]&a[k]的值叫q
那么q一定是a[j]和a[k]的子集(数字的子集是转化为二进制后,每一位都小于等于原数字的数,而不是集合)
因此,我们就可以遍历这些数字的子集,要用dfs执行
当然,别忘了高位优先 !
三、dfs深搜
这部分的深搜很像状压DP,我们只需要找出现了两次的子集即可,同时我们还要避免同一个数的子集算了两次
如110的子集010和100的下一个子集都是000
用vis数组记录即可
四、代码
#include<iostream>
using namespace std;
int sum[2000010],a[1000010],vis[2000010],n,ans;
void h(int x,int y){
if(sum[x]>1||vis[x]==y) return ;
++sum[x];
vis[x]=y;
for(int i=0;(1<<i-1)<x;i++)
if(x&(1<<i)) h(x^(1<<i),y);
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
h(a[n],n);
h(a[n-1],n-1);
for(int i=n-2;i>=1;i--){
int k=0;
for(int j=20;j>=0;j--){
if(!(a[i]&(1<<j))&&sum[k^(1<<j)]>1) k^=(1<<j);
}
ans=max(ans,a[i]|k);
h(a[i],i);
}
printf("%d",ans);
return 0;
}
Codeforces 1208F Bits And Pieces的更多相关文章
- Codeforces 1208F Bits And Pieces 位运算 + 贪心 + dp
题意:给你一个序列a, 问a[i] ^ (a[j] & a[k])的最大值,其中i < j < k. 思路:我们考虑对于每个a[i]求出它的最优解.因为是异或运算,所以我们从高位向 ...
- 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 ...
- Codeforces F. Bits And Pieces(位运算)
传送门. 位运算的比较基本的题. 考虑枚举\(i\),然后二进制位从大到小考虑, 对于第\(w\)位,如果\(a[i][w]=1\),那么对\(j.k\)并没有什么限制. 如果\(a[i][w]=0\ ...
- CF1208F Bits And Pieces
CF1208F Bits And Pieces 传送门 思路 这里要运用SOS-DP的思路(\(\text{Sum over Subsets}\)).我在另外一篇博客里介绍过,如有需要可以搜索一下我的 ...
- 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 485C Bits[贪心 二进制]
C. Bits time limit per test1 second memory limit per test256 megabytes inputstandard input outputsta ...
- Codeforces 132E Bits of merry old England 【最小费用最大流】
题意: 让你输出长度为n的某个序列,然后给你m个变量. 每次给某个数赋值的代价是 假设赋值a=7那么代价是3,因为7的二进制位中有3个1. 要求最后总代价最小. 输出总共要进行操作的次数,和最小代价. ...
- Codeforces 328B-Sheldon and Ice Pieces(馋)
B. Sheldon and Ice Pieces time limit per test 1 second memory limit per test 256 megabytes input sta ...
- CodeForces 484A Bits(水题)
A. Bits time limit per test 1 second memory limit per test 256 megabytes input standard input output ...
- codeforces C. Bits(数学题+或运算)
题意:给定一个区间,求区间中的一个数,这个数表示成二进制的时候,数字1的个数最多! 如果有多个这样的数字,输出最小的那个! 思路:对左区间的这个数lx的二进制 从右往左将0变成1,直到lx的值大于右区 ...
随机推荐
- 益赛普等TNFi持续治疗强直性脊柱炎的长期疗效观察(≥3年)
北大深圳医院风湿免疫科在2021年发表了益赛普等TNFi持续治疗强直性脊柱炎的长期(≥3年)疗效观察[1]. 入排条件严苛,坚持随访不容易 观察对象是2009-2019年间就诊于该科室的AS患者,需有 ...
- Windows 注册表是什么
注册表的概念 历史发展 在 Windows 3.x 操作系统中,注册表是一个极小文件,其文件名为 Reg.dat,里面只存放了某些文件类型的应用程序关联,大部分的设置是被放在 win.ini.syst ...
- PostGIS之地理坐标
1. 概述 PostGIS 是PostgreSQL数据库一个空间数据库扩展,它添加了对地理对象的支持,允许在 SQL 中运行空间查询 PostGIS官网:About PostGIS | PostGIS ...
- springboot跳转页面404的问题
今天测试的时候出现了这个问题: Cannot forward to error page for request [/] as the response has already been commit ...
- http 协议( 简单了解 )
HTTP 请求协议 超文本传输协议,是一种用于分布式写作式和媒体信息系统的应用层协议. HTTP是万维网的数据通信的基础. HTTP协议概述 HTTP是一个客户端终端 (用户) 和服务器端 ( 网端) ...
- 2、flex最后不对齐问题
https://www.zhangxinxu.com/wordpress/2019/08/css-flex-last-align/
- 第一天 python环境变量安装(2.7)
一.什么是python Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计简单,易学,免费,开源,面向对象,可拓展性 Python 是一种解释型语言: ...
- 微信电脑版 v3.9.2.12 绿色便携版
修改历史: 2023.03.01:自改官方 3.9.2.12 最新正式版本2023.01.31:自改官方 3.9.0.28 最新正式版本2023.01.11:自改官方 3.9.0.21 最新正式版本- ...
- FMC DA子卡设计原理图:FMCJ465-2路 16bit 12.6GSPS FMC DA子卡
FMCJ465-2路 16bit 12.6GSPS FMC DA子卡 一.板卡概述: FMCJ465是一款转换速率最高为12.6GSPS 的 DAC 回放板,DAC位数16bit; 板卡基于 ...
- 《黑马旅游网》综合案例六 BaseServlet 抽取
BaseServlet抽取 减少Servlet的数量,现在是一个功能一个Servlet,将其优化为一个模块一个Servlet, 相当于在数据库中一张表对应一个Servlet,在Servlet中提供不同 ...