CF1592E Bored Bakry

题意:

给你长度为n的数组a,现在定义一段区间[l,r]为good,如果al&al+1&...&ar>al⊕al+1⊕...⊕ara_{l}\& a_{l+1}\&...\&a_{r}>a_{l}⊕a_{l+1}⊕...⊕a_{r}al​&al+1​&...&ar​>al​⊕al+1​⊕...⊕ar​
请输出good区间的最长长度

题解:

我们先去考虑&与⊕的区别,满足情况的区间一定是偶数长度,如果是奇数长度,左侧全是1(二进制),右侧全是1,两侧结果都还是1,不满足>。只有区间长度为偶数,左侧二进制第k位全是1,右侧也全是1,这样才行。
我们从最高位开始枚举这个k,good区间要满足,存在一个二进制某一位k,某个长度为偶数的序列每个数在这一位上都是1,并且二进制位大于等于k的数的异或和应该是0(因为等于k的全是1,偶数个,异或为0,而大于k的异或值都要为0才不会对第k位的情况造成干扰)

那么我们就需要对于每个k下的区间进行判断,用到两个数组:数组b表示第k位上前i个数里有多少个数这一位是1,数组c表示前i个数在高于b的位置上的异或和
如果数组c中出现两个一样的数,说明这两个数之间的数异或和为0,如果这一段都是1(用b数组的前缀和之差是否等于区间长度来判断),说明这个区间正好满足定义,用这个长度更新ans就可以了
详细看代码

代码:

#include <bits/stdc++.h>
#include <unordered_map>
#define debug(a, b) printf("%s = %d\n", a, b);
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
clock_t startTime, endTime;
//Fe~Jozky
const ll INF_ll= 1e18;
const int INF_int= 0x3f3f3f3f;
void read(){};
template <typename _Tp, typename... _Tps> void read(_Tp& x, _Tps&... Ar)
{x= 0;char c= getchar();bool flag= 0;while (c < '0' || c > '9')flag|= (c == '-'), c= getchar();while (c >= '0' && c <= '9')x= (x << 3) + (x << 1) + (c ^ 48), c= getchar();if (flag)x= -x;read(Ar...);
}
template <typename T> inline void write(T x)
{if (x < 0) {x= ~(x - 1);putchar('-');}if (x > 9)write(x / 10);putchar(x % 10 + '0');
}
void rd_test()
{#ifdef ONLINE_JUDGE
#elsestartTime = clock ();freopen("data.in", "r", stdin);
#endif
}
void Time_test()
{#ifdef ONLINE_JUDGE
#elseendTime= clock();printf("\nRun Time:%lfs\n", (double)(endTime - startTime) / CLOCKS_PER_SEC);
#endif
}
const int maxn=1e6+9;
int a[maxn];
int b[maxn];
int sum[maxn];
int vis[maxn];
int main()
{//rd_test();int n;read(n);int ans=0;for(int i=1;i<=n;i++)read(a[i]);for(int j=20;j>=0;j--){for(int i=1;i<=n;i++){b[i]=b[i-1]+((a[i]>>j)&1);sum[i]=sum[i-1]^(a[i]>>j);}memset(vis,-1,sizeof(vis));vis[0]=0;for(int i=1;i<=n;i++){if(vis[sum[i]]!=-1){if(b[i]-b[vis[sum[i]]]==i-vis[sum[i]]){ans=max(ans,i-vis[sum[i]]);
//                  printf("%d %d\n",vis[sum[i]],i);}else vis[sum[i]]=i;}else {vis[sum[i]]=i;}}}cout<<ans<<endl;//Time_test();
}

CF1592E Bored Bakry相关推荐

  1. CF1592E Bored Bakry(二进制+前缀异或和)

    CF1592E Bored Bakry description solution code description 题目链接 solution and\text{and}and如果第iii位为111, ...

  2. Codeforces Round #746 (Div. 2)

    Codeforces Round #746 (Div. 2) 题号 题目 难度 A Gamer Hemose B Hemose Shopping C Bakry and Partitioning D ...

  3. NBUT- 1228 J - Bored Three - God

    题目链接:https://cn.vjudge.net/problem/NBUT-1228 题目 The bored Three-God get another boring question. Thi ...

  4. 【无标Bored Ape Yacht Club (无聊猿) NFT 生态系统指南

    ​​Bored Ape Yacht Club (BAYC) 是由 10,000 只"无聊猿"组成的 NFT 集合,于 2021 年 4 月 30 日推出并向公众公开,这是现在著名的 ...

  5. 一睹为快,推特NFT网红热议的Bored Ape是个啥?

    Bored Ape Yacht Club火了. DappRadar显示,Bored Ape Yacht Club在过去24小时内快速攀升,成为顶流的热门收藏,且排名前二. Bored Ape Yach ...

  6. GARFIELD@01-24-2005

    the kickoff of not being bored 转载于:https://www.cnblogs.com/rexhost/archive/2005/01/24/96477.html

  7. linux之父密码,Linux之父十大名言

    Linux之父Linus Torvalds的十大名言,您听说过几句? 1. "Software is like sex: it's better when it's free." ...

  8. 一位中学计算机老师的英语作文,我的老师英语作文(精选14篇)

    我的老师英语作文(精选14篇) 在平时的学习.工作或生活中,大家都不可避免地会接触到作文吧,通过作文可以把我们那些零零散散的思想,聚集在一块.你所见过的作文是什么样的呢?以下是小编帮大家整理的我的老师 ...

  9. hdu 1085 Holding Bin-Laden Captive!

    Description We all know that Bin-Laden is a notorious terrorist, and he has disappeared for a long t ...

最新文章

  1. 关于EF查询表里的部分字段
  2. VTK:IO之ReadBMP
  3. 一篇文章教会你使用Python中三种简单的函数
  4. datetimepicker一个不错的日历android特效
  5. Java区间拆分子集求和,对列表中的数字子集求和
  6. linux中touch命令如何使用,Linux touch命令
  7. linux终端怎么设置monaco,ubuntu16.04安装monaco字体
  8. 从支付架构到风控报警,支付系统的设计如何环环相扣?
  9. 直播系统app源码,简单实现颜色渐变
  10. java省市区树_ztree实现中国省市区树形
  11. shell 脚本-while用法
  12. R语言完成中国裁判文书网最新爬虫
  13. 基于Vue使用Arco Design组件封装一个七牛云上传图片的函数
  14. 线性拟合——离群点outliers的处理
  15. xp计算机无法关机,WinXP电脑无法关机的解决方法
  16. python的pth打开方式_pytorch 加载(.pth)格式的模型实例
  17. 凉开水泡绿茶有利降血糖
  18. javaweb-day03-7(基础加强-泛型)
  19. 计算机开机的四个画面,电脑系统开机时的欢迎使用四个漂亮字如何修改
  20. 怎么定位门面位置_教您,如何在高德和腾讯定位自己的店铺位置

热门文章

  1. 一组超炫酷的动图,感受那让人窒息的数学之美!
  2. easyui 修改单元格内容_初学Excel办公软件快速修改文字的方法
  3. java当前时间推前三个月_获取当前时间的前三个月 java
  4. js 定时网页点击_反爬 JS 逆向,扣代码解密分析
  5. java 注册驱动失败_java – JDBC驱动程序注册死锁?
  6. linux端口 fcs校验,我如何接收错误的以太网帧并禁用CRC / FCS计算?
  7. linux调用odbc接口乱码,linux中pypyodbc读取GB编码mdb中文乱码解决办法
  8. leetcode367. 有效的完全平方数
  9. leetcode112. 路径总和
  10. 40. 组合总和 II021(回溯法)