题目描述:

现在你拥有 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=,c=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){c=*c+ch-'';ch=getchar();}
return f*c;
}
int n,a[N];
struct Trie
{
int tot,siz[*N],ch[*N][],rt[N];
void insert(int k,int x)
{
int u,l=rt[k-];
rt[k]=u=++tot;
for(int i=;i>=;i--)
{
ch[u][]=ch[l][],ch[u][]=ch[l][],siz[u]=siz[l]+;
int k = (x>>i)&;
ch[u][k]=++tot;
u=ch[u][k],l=ch[l][k];
}
siz[u]=siz[l]+;
}
int query(int l,int r,int x)
{
l = rt[l],r = rt[r];
int ret = ;
for(int i=;i>=;i--)
{
int k = (x>>i)&;
if(siz[ch[r][!k]]-siz[ch[l][!k]])
{
l=ch[l][!k],r=ch[r][!k];
ret|=(<<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=;i<=n;i++)
{
a[i]=rd(),l[i]=i-,r[i]=i+;
tr.insert(i,a[i]);
p[i].x=i,p[i].v=a[i];
}
l[]=,r[]=;
l[n+]=n,r[n+]=n+;
int ans = ;
sort(p+,p++n,cmp);
for(int i=;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=;i<=n;i++)
ans=max(ans,tr.query(lf[i],rg[i]-,a[i]));
printf("%d\n",ans);
return ;
}

[HEOI2013]ALO的更多相关文章

  1. BZOJ3166: [Heoi2013]Alo

    3166: [Heoi2013]Alo Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 394  Solved: 204[Submit][Status] ...

  2. bzoj 3166 [Heoi2013]Alo 可持久化Trie

    3166: [Heoi2013]Alo Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1227  Solved: 569[Submit][Status ...

  3. P4098 [HEOI2013]ALO

    最近这个家伙去哪了,为啥一直不更博客了呢?原来他被老师逼迫去补了一周的文化课,以至于不会把班里的平均分拉掉太多.好了,我们来看下面这道题目: P4098 [HEOI2013]ALO 题目描述 Welc ...

  4. BZOJ 3166: [Heoi2013]Alo

    3166: [Heoi2013]Alo Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 923  Solved: 437[Submit][Status] ...

  5. [BZOJ3166][Heoi2013]Alo 可持久化Trie树

    3166: [Heoi2013]Alo Time Limit: 20 Sec Memory Limit: 256 MB DescriptionWelcome to ALO ( Arithmetic a ...

  6. 【BZOJ3166】[Heoi2013]Alo 可持久化Trie树+set

    [BZOJ3166][Heoi2013]Alo Description Welcome to ALO ( Arithmetic and Logistic Online).这是一个VR MMORPG , ...

  7. Bzoj 3166 [Heoi2013] Alo 题解

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

  8. P4098 [HEOI2013]ALO 可持久化01Trie

    $ \color{#0066ff}{ 题目描述 }$ Welcome to ALO ( Arithmetic and Logistic Online).这是一个 VR MMORPG, 如名字所见,到处 ...

  9. 暴力 【p4098】[HEOI2013]ALO

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

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

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

随机推荐

  1. UVa 12714 Two Points Revisited (水题,计算几何)

    题意:给定一条线段,让你求一条线段与已知线段垂直,并且所有线段的坐标的点的坐标都不大于给定的坐标的最大值且不能为负数. 析:没啥好说的,随便找一条就好. 代码如下: #pragma comment(l ...

  2. ES6 我的总结学习

    1 let 和 const let 的作用域与 const 命令相同:只在声明所在的块级作用域内有效.且不存在变量提升 . 1.1 let let 所声明的变量,可以改变. let a = 123 a ...

  3. X86 Linux 下 SIGBUS 总结

    SIGBUS 在 x86 Linux 上并不多见,但一旦出现,其调用堆栈常常让人摸不着头脑,加之信号问题各平台系统间差异较大,更让人难以理清,这里稍微总结一下 x86 Linux 上大概有哪些情形会触 ...

  4. SpringMVC传递multiple类型select后台Controller的接收方法

    Spring MVC在接收集合请求参数时,需要在Controller方法的集合参数里前添加@RequestBody,而@RequestBody默认接收的enctype (MIME编码)是applica ...

  5. mui 每次页面跳转用mui.openWindow会不会占用很大内存?

    http://ask.dcloud.net.cn/question/5384 不能每次用mui.openWindow.不用的webview要close,一个webview被close后会露出其他没有被 ...

  6. POJ 2234 Nim博弈

    思路: nim博弈裸题 xor一下 //By SiriusRen #include <cstdio> using namespace std; int n,tmp,xx; int main ...

  7. _bzoj1013 [JSOI2008]球形空间产生器sphere【高斯消元】

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1013 保存高斯消元模版. ps,这一题的英文名字是ヨスガノソラ的开发商~^_^ #inclu ...

  8. 题解报告:hdu 1235 统计同成绩学生人数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1235 Problem Description 读入N名学生的成绩,将获得某一给定分数的学生人数输出. ...

  9. 浏览器 cookie session

    浏览器的cookie被禁用的话,则服务端的session不起作用 session是基于cookie实现的, 还是办理会员卡的问题, cookie客户端支持,即客户手上的会员卡记录了所有信息, sess ...

  10. Spark学习之基于MLlib的机器学习

    Spark学习之基于MLlib的机器学习 1. 机器学习算法尝试根据训练数据(training data)使得表示算法行为的数学目标最大化,并以此来进行预测或作出决定. 2. MLlib完成文本分类任 ...