传送门

文章目录

  • 题意:
  • 思路:

题意:


n≤1e6,ai≤2e6n\le1e6,a_i\le2e6n≤1e6,ai​≤2e6

思路:

由于(aj&ak)(a_j \And a_k)(aj​&ak​)打的括号,所以应该放在一起考虑,现在我们可以枚举aia_iai​,由于是或操作,所以我们肯定是从高位到低位贪心的选,如果当前iii右边有两个数他们这一位都是111,那么答案这一位一定是111。当然如果aia_iai​的这一位也是111就不需要考虑这一位了,直接跳过就好。现在问题转换成了如何快速判断当前这位右边是否存在一个超集它这一位是111。
很容易想到用sosdpsosdpsosdp来预处理出所有超集,这样处理出来的是整个数组的,但是怎么判断当前位右边是否有至少两个呢?我们可以记一个超集的最右边的两个位置,当i≥i\gei≥当前第二大的位置的时候这一位就不能要。
实现起来就很简单辣。

// Problem: F. Bits And Pieces
// Contest: Codeforces - Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)
// URL: https://codeforces.com/contest/1208/problem/F
// Memory Limit: 256 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=2000005,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n;
int a[N];
PII pos[N];void add(int val,int id) {//if(id==-1) return;if(pos[val].X==-1) {pos[val].X=id;return;} else if(pos[val].Y==-1) {if(pos[val].X==id) return;pos[val].Y=id;if(id>pos[val].X) pos[val].Y=pos[val].X,pos[val].X=id;} else {if(id==pos[val].X||id==pos[val].Y) return;if(id>pos[val].X) pos[val].Y=pos[val].X,pos[val].X=id;else if(id>pos[val].Y) pos[val].Y=id; }
}int main()
{//  ios::sync_with_stdio(false);
//  cin.tie(0);scanf("%d",&n);memset(pos,-1,sizeof(pos));for(int i=1;i<=n;i++) scanf("%d",&a[i]),add(a[i],i);for(int i=0;i<21;i++) for(int j=0;j<N;j++) {if(j>>i&1) {add(j^(1<<i),pos[j].X);add(j^(1<<i),pos[j].Y);}}int ans=0;for(int i=1;i<=n-2;i++) {int now=0;for(int j=20;j>=0;j--) {if(a[i]>>j&1) continue;now+=1<<j;if(now>=N||pos[now].Y<=i||pos[now].Y==-1) now-=1<<j; }ans=max(ans,a[i]|now);}printf("%d\n",ans);return 0;
}
/**/

Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2) F. Bits And Pieces sosdp预处理超集相关推荐

  1. Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)

    Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2) 题号 题目 知识点 A XORinacci B Uniqueness ...

  2. 每日一套szuManthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)

    构造矩阵:一开始随便写了一个矩阵发现为满足,每行每列的异或和为0又因为是4的倍数 然后每个数加上16去构造剩下得部分 #include <iostream> #include <cs ...

  3. Codefest 18 (rated, Div. 1 + Div. 2)-D-Valid BFS--思维--已知bfs序,求是否正确

    Codefest 18 (rated, Div. 1 + Div. 2)-D-Valid BFSvj地址 题意:给你一段bfs序列,让你判断是否正确 思路:先给节点排序(很关键) 我们给每一个的点的邻 ...

  4. Ozon Tech Challenge 2020 (Div.1 + Div.2, Rated) D. Kuroni and the Celebration 交互 + 思维

    传送门 文章目录 题意: 思路: 题意: 给你一颗树,每次可以询问两个点的lcalcalca,询问次数不能超过⌊n2⌋\left \lfloor \frac{n}{2} \right \rfloor⌊ ...

  5. Ozon Tech Challenge 2020 (Div.1 + Div.2, Rated, T-shirts + prizes!)

    Ozon Tech Challenge 2020 (Div.1 + Div.2, Rated, T-shirts + prizes!) 题号 题目 知识点 A Kuroni and the Gifts ...

  6. Deltix Round, Summer 2021 (open for everyone, rated, Div. 1 + Div. 2)

    Deltix Round, Summer 2021 (open for everyone, rated, Div. 1 + Div. 2) 题号 题目 知识点 A A Variety of Opera ...

  7. Deltix Round, Spring 2021 (open for everyone, rated, Div. 1 + Div. 2)

    Deltix Round, Spring 2021 (open for everyone, rated, Div. 1 + Div. 2) 题号 题目 知识点 A Game of Life B Lor ...

  8. Harbour.Space Scholarship Contest 2021-2022 (open for everyone, rated, Div. 1 + Div. 2)

    Harbour.Space Scholarship Contest 2021-2022 (open for everyone, rated, Div. 1 + Div. 2) 题号 题目 知识点 A ...

  9. Codeforces Round #504 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final)切题报告(A-B题)

    这是我第二次参加CF比赛,也是第一次写博客,写得不好,望各位大佬海涵. A. Single Wildcard Pattern Matching 原题链接 这道题,这是难到让人无法直视,太水了. 题目大 ...

最新文章

  1. 前端学习(3072):vue+element今日头条管理-删除文章失败(json-bigint)
  2. python应声虫程序_Python编程基础
  3. panda python_12个很棒的Pandas和NumPy函数,让分析事半功倍
  4. OpenCV计算机视觉实战(Python版)_002图像基本操作
  5. mysql存储过程返回hello world_Mysql存储过程 之 “Hello,World”
  6. gimp 抠图_GIMP入门教程2——利用蒙版抠图.pdf
  7. db2数据库连接数 linux_linux下db2数据库命令
  8. qlabel显示两行_PyQt5 系统化学习: QLabel
  9. 英文日期和时间表示方法
  10. 蓝牙耳机无法与计算机连接,蓝牙耳机怎么连接电脑【图文教程】
  11. [Noi online-j]T1 切蛋糕
  12. algodoo是什么意思_ooc表示的是什么意思什么梗 网络用语OOC含义
  13. 金融信创爆发年,优炫数据库高可用高性能解决方案
  14. AcrelCloud-9500电瓶车充电桩收费平台在公共场所中的应用
  15. 测试面试题-如何测试朋友圈
  16. 做前端,如何克服新技术焦虑?
  17. 复数乘法(JAVA)
  18. 基于 mPaaS 框架 Portal-Bundle 接入方式下 Multidex 分包失效的解决方法
  19. 三极管基础分类, 参数选择及常见型号对比
  20. java mail 收 附件_使用 JavaMail 收发邮件,解决中文附件问题

热门文章

  1. 相信应该有百分九十的男生看见这个东西是这个状态吧?
  2. 每日一笑 | 为什么椅子总是最乱的?
  3. 白话AI:看懂深度学习真的那么难吗?初中数学,就用10分钟
  4. 干货|MIT线性代数课程精细笔记[第一课]
  5. 数据挖掘技术在信用卡业务中的应用及实例分析
  6. vue实现搜索框记录搜索历史_2018-09-13 基于Vue的搜索栏功能实现(we-ui)
  7. linux默认归档目录,Linux系统管理(第4章:目录和文件管理二)
  8. java怎么打印进制,java编程思维_007打印二进制,八进制,十六进制
  9. mysql slave 1032_修复mysql slave复制1032错误
  10. 数据集转换_为什么LSTM看起来那么复杂,以及如何避免时序数据的处理差异和混乱...