题目描述:

现在你拥有 n 颗宝石,每颗宝石有一个能量密度,记为 ai,这些宝石的能量 密度两两不同。现在你可以选取连续的一些宝石(必须多于一个)进行融合,设 为 ai, ai+1, …, aj,则融合而成的宝石的能量密度为这些宝石中能量密度的次大值 与其他任意一颗宝石的能量密度按位异或的值,即,设该段宝石能量密度次大值 为 k,则生成的宝石的能量密度为 max{k xor ap | ap ≠ k , i ≤ p ≤ j}

题解:
首先建可持久化Trie。

然后是区间的选取问题。

想了好久想出来一种方法:

对于每个点建双向链表,从小到大删点。

对于每个点可取区间为[左方第二个比它大的+1,右方第二个比它大的-1]。

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 50050
inline int rd()
{int f=1,c=0;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){c=10*c+ch-'0';ch=getchar();}return f*c;
}
int n,a[N];
struct Trie
{int tot,siz[32*N],ch[32*N][2],rt[N];void insert(int k,int x){int u,l=rt[k-1];rt[k]=u=++tot;for(int i=30;i>=0;i--){ch[u][0]=ch[l][0],ch[u][1]=ch[l][1],siz[u]=siz[l]+1;int k = (x>>i)&1;ch[u][k]=++tot;u=ch[u][k],l=ch[l][k];}siz[u]=siz[l]+1;}int query(int l,int r,int x){l = rt[l],r = rt[r];int ret = 0;for(int i=30;i>=0;i--){int k = (x>>i)&1;if(siz[ch[r][!k]]-siz[ch[l][!k]]){l=ch[l][!k],r=ch[r][!k];ret|=(1<<i);}else l=ch[l][k],r=ch[r][k];}return ret;}
}tr;
int l[N],r[N],lf[N],rg[N];
struct node
{int x,v;
}p[N];
bool cmp(node a,node b)
{return a.v<b.v;
}
int main()
{n=rd();for(int i=1;i<=n;i++){a[i]=rd(),l[i]=i-1,r[i]=i+1;tr.insert(i,a[i]);p[i].x=i,p[i].v=a[i];}l[0]=0,r[0]=1;l[n+1]=n,r[n+1]=n+1;int ans = 0;sort(p+1,p+1+n,cmp);for(int i=1;i<=n;i++){int u = p[i].x;r[l[u]]=r[u],l[r[u]]=l[u];lf[u]=l[l[u]],rg[u]=r[r[u]];}for(int i=1;i<=n;i++)ans=max(ans,tr.query(lf[i],rg[i]-1,a[i]));printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/LiGuanlin1124/p/10024032.html

[HEOI2013]ALO相关推荐

  1. BZOJ #3166. [Heoi2013]Alo(可持久化trie树+set)

    #3166. [Heoi2013]Alo description solution code BZOJ3166 description Welcome to ALO ( Arithmetic and ...

  2. Bzoj 3166 [Heoi2013] Alo 题解

    3166: [Heoi2013]Alo Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 1118  Solved: 518 [Submit][Stat ...

  3. 洛谷P4098 [HEOI2013]ALO

    题目链接 [HEOI2013]ALO 题目描述 现在你拥有 n 颗宝石,每颗宝石有一个能量密度,记为 ai,这些宝石的能量 密度两两不同.现在你可以选取连续的一些宝石(必须多于一个)进行融合,设 为 ...

  4. BZOJ3166 [Heoi2013]Alo 【可持久化trie树 + 二分 + ST表】

    题目 Welcome to ALO ( Arithmetic and Logistic Online).这是一个VR MMORPG , 如名字所见,到处充满了数学的谜题. 现在你拥有n颗宝石,每颗宝石 ...

  5. [HEOI2013]ALO(待更)

    题解: 可持久化trie 转载于:https://www.cnblogs.com/yinwuxiao/p/8856894.html

  6. P4098 [HEOI2013]ALO

    传送门 注意到关于次大值的要求,感觉直接搞不太行 考虑每个位置作为次大值时,可以包括的区间 设位置 $i$ 左边第一个大于它的数位置为 $l1$ ,第二个大于它的数位置为 $l2$ 设位置 $i$ 右 ...

  7. HEOI2013 ALO

    题目链接:戳我 我竟然还有脸发出这样一篇题解....... 其实我是暴力水过去的,,就从一个点开始,找它两边的数和它异或,不断更新答案.如果一侧找到第二个比它大的数,就break掉...... 正解是 ...

  8. 3166: [Heoi2013]Alo

    题意: 找到一个区间,设kkk位区间次大值,求max(k⊕a[i]∣l≤i≤r)max(k \oplus a[i]|l\le i \le r)max(k⊕a[i]∣l≤i≤r) 题解: 首先考虑某个值 ...

  9. To_Heart—题解——[HEOI2013]ALO

    题目链接 Link. 题解 对于每一个数,我们先考虑它可以和哪些数异或. 设当前这个数为 iii,如果我们能够找到左边的第二个 lll 使得 ai<ala_i<a_lai​<al​, ...

最新文章

  1. android floatingactionbutton样式,Android 之 FloatingActionButton
  2. Tracer cannot set value trace for type None. Supported types are tensor, tensor list, and tuple
  3. DCMTK:使用JPEG-LS传输语法解压缩DICOM文件
  4. 安卓4.4.4安装哪个微信版本_??微信又更新!暗黑模式可独立设置,新增群接龙固定入口...
  5. 《Spring技术内幕》——2.3节IoC容器的初始化过程
  6. C4D怎么快速建模桌布? c4d创建桌布的教程
  7. gem5——向简单脚本中添加缓存
  8. BIOS学习之Beyong Bios
  9. “三只猫,三分钟,捉三只老鼠,多少只猫,一百分钟,捉一百只老鼠”有感
  10. python again_It’s really(wonder)________ to see you here again in Beijing.
  11. D. Pythagorean Triples
  12. CPU选择intel还是amd
  13. Java五子棋(2)
  14. 数据结构与算法:冒泡排序、插入排序、选择排序
  15. 计算机集中控制系统结构上和DCS基本一致,dcs集中控制系统
  16. textarea回车符问题
  17. Java DecimalFormat 格式化数字,取2位小数,按位取小数,按要求格式化小数 float,double,int,等类型都支持
  18. 下载 github上面脚本_带大家一起来白嫖一波Github的免费计算资源呀~
  19. Edge浏览器访问特殊网站端口(如10080)出现ERR_UNSAFE_PORT解决办法
  20. 关于keil MDK调整优先级程序出错的解决思路

热门文章

  1. 【调剂】中国矿业大学(徐州)2022年硕士研究生拟接受调剂专业
  2. 软件工程工程伦理案例分析_案例工具及其范围| 软件工程
  3. jn-社团申请必须要上传图片
  4. C++ 实现 ping 功能 域名(URL)解析实际 IP地址
  5. no module named yum有效解决办法
  6. Reading22. Understanding Balance Sheets
  7. ls -al 命令详解
  8. VMware 虚拟机启动时出现错误:The virtual machine appears to be in use
  9. Witt向量简介 摘要与目录跳转
  10. PS基础教程[7]如何为照片瘦身