题目

网上自己搜

解析

区间异或很容易想到可持久化字典树

但本题的关键是如何高效率求出以某个数为区间最大值时这个区间的范围

依题我们知道区间最长可到比它第二大的位置(开区间)

所以我们如果能找到每个数比他大的

这个问题就迎刃而解了

我们可以排序后从小到大算答案

用双向链表记录前一个比他大的和后一个比他大的

算完它就把他删掉

并且修改之后的链表指向

\(Code\)

#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std; const int N = 5e4 + 5;
int n , a[N] , id[N] , ans , nxt[N] , pre[N] , rt[N] , size , t[30 * N][2] , sum[60 * N]; inline bool cmp(int x , int y){return a[x] < a[y];} inline void update(int u , int v , int w)
{
for(register int i = 30; i >= 0; i--)
{
int c = (w >> i) & 1;
sum[u] = sum[v] + 1;
t[u][c ^ 1] = t[v][c ^ 1];
t[u][c] = ++size;
u = t[u][c] , v = t[v][c];
}
sum[u] = sum[v] + 1;
} inline int query(int u , int v , int w)
{
int res = 0;
for(register int i = 30; i >= 0; i--)
{
int c = (w >> i) & 1 , x = sum[t[v][c ^ 1]] - sum[t[u][c ^ 1]];
if (x) res += 1 << i , u = t[u][c ^ 1] , v = t[v][c ^ 1];
else u = t[u][c] , v = t[v][c];
}
return res;
} int main()
{
scanf("%d" , &n);
for(register int i = 1; i <= n; i++) scanf("%d" , &a[i]) , id[i] = i , pre[i] = i - 1 , nxt[i] = i + 1;
nxt[n + 1] = n + 1;
for(register int i = 1; i <= n; i++) rt[i] = ++size , update(rt[i] , rt[i - 1] , a[i]);
sort(id + 1 , id + n + 1 , cmp);
for(register int i = 1; i <= n; i++)
{
int now = id[i] , l = max(1 , pre[pre[now]] + 1) , r = min(n , nxt[nxt[now]] - 1);
ans = max(ans , query(rt[l - 1] , rt[r] , a[now]));
pre[nxt[now]] = pre[now] , nxt[pre[now]] = nxt[now];
}
printf("%d" , ans);
}

最新文章

  1. 用Javascript(js)进行HTML转义工具(处理特殊字符显示)
  2. 那些年使用Hive踩过的坑
  3. 从头开始 启动开源电商项目jShop
  4. 高性能MySQL第1章知识点梳理
  5. .NET破解之太乐地图下载器【非暴破】
  6. photoshop将psd导出div+css格式HTML(自动)
  7. AngularJS_对象数组-filter-orderBy
  8. P31、面试题2:实现Singleton模式
  9. android api 中文 (75)—— AdapterView.OnItemClickListener
  10. C#调用百度地图API
  11. MCMC(四)Gibbs采样
  12. 【功能代码】---4用JS获取地址栏参数方法
  13. 集合之深入理解HashMap
  14. ELF 动态链接 - so 的 重定位表
  15. js-notebook
  16. voinc+vue实现级联选择
  17. mysql-linux定时备份mysql数据库
  18. 前端 --- 4 js
  19. php apache
  20. 改善C++ 程序的150个建议学习之建议7:时刻提防内存溢出

热门文章

  1. 一个有趣的nginx HTTP 400响应问题分析
  2. 《吐血整理》高级系列教程-吃透Fiddler抓包教程(35)-Fiddler如何抓取微信小程序的包-下篇
  3. 【Shell脚本案例】案例3:批量创建100个用户并设置密码
  4. Windows10下python3和python2同时安装(二)python2.exe、python3.exe和pip2、pip3设置
  5. Servlet层
  6. 有状态软件如何在 k8s 上快速扩容甚至自动扩容
  7. HBX更新后无法打包
  8. SQL一文入门助记
  9. JavaScript入门⑩-ES6归纳总结
  10. git使用与代码托管