考虑原序列中的每一个值作为构成最终答案的那个次大值,那么其所在的合法区间最大时,其对答案的贡献最大。

一个值作为最大值时有两个合法的最大区间,一个是左边第二个比其大的位置和右边第一个比其大的位置构成的区间,另一个是左边第一个比其大的位置和右边第二个比其大的位置构成的区间,这两个区间都是开区间。确定区间可以从小到大排序,用双向链表一个一个删除即可。

然后就将问题简化了,现在要解决给定一个值,求给定区间与其的异或最大值,可以对原序列建可持久化\(Trie\),查询时直接在\(Trie\)上贪心就行。

实现细节看代码吧。

\(code:\)

#include<bits/stdc++.h>
#define maxn 3000010
using namespace std;
template<typename T> inline void read(T &x)
{
x=0;char c=getchar();bool flag=false;
while(!isdigit(c)){if(c=='-')flag=true;c=getchar();}
while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
if(flag)x=-x;
}
int n,tot,ans;
int a[maxn],p[maxn],pre[maxn],nxt[maxn];
int rt[maxn],t[maxn][2],cnt[maxn];
bool cmp(const int &x,const int &y)
{
return a[x]<a[y];
}
void insert(int x,int k,int &p)
{
cnt[++tot]=cnt[p],t[tot][0]=t[p][0],t[tot][1]=t[p][1];
p=tot,cnt[p]++;
if(k==-1) return;
insert(x,k-1,t[p][(x>>k)&1]);
}
int query(int ql,int qr,int k,int x)
{
if(k==-1) return 0;
int ch=((x>>k)&1)^1;
if(cnt[t[qr][ch]]-cnt[t[ql][ch]])
return query(t[ql][ch],t[qr][ch],k-1,x)|(1<<k);
else return query(t[ql][ch^1],t[qr][ch^1],k-1,x);
}
int main()
{
read(n);
for(int i=1;i<=n;++i) pre[i]=i-1,nxt[i]=i+1,p[i]=i;
for(int i=1;i<=n;++i)
read(a[i]),rt[i]=rt[i-1],insert(a[i],30,rt[i]);
sort(p+1,p+n+1,cmp);
for(int i=1;i<=n;++i)
{
int l=pre[p[i]],r=nxt[p[i]];
nxt[l]=r,pre[r]=l;
if(l) ans=max(ans,query(rt[pre[l]],rt[r-1],30,a[p[i]]));
if(r!=n+1) ans=max(ans,query(rt[l],rt[nxt[r]-1],30,a[p[i]]));
}
printf("%d\n",ans);
return 0;
}

题解 洛谷 P4098 【[HEOI2013]ALO 】的更多相关文章

  1. 题解——洛谷P4095 [HEOI2013]Eden 的新背包问题(背包)

    思路很妙的背包 用了一些前缀和的思想 去掉了一个物品,我们可以从前i-1个和后i+1个推出答案 奇妙的思路 #include <cstdio> #include <algorithm ...

  2. P4098 [HEOI2013]ALO

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

  3. 题解 洛谷P5018【对称二叉树】(noip2018T4)

    \(noip2018\) \(T4\)题解 其实呢,我是觉得这题比\(T3\)水到不知道哪里去了 毕竟我比较菜,不大会\(dp\) 好了开始讲正事 这题其实考察的其实就是选手对D(大)F(法)S(师) ...

  4. 题解 洛谷 P3396 【哈希冲突】(根号分治)

    根号分治 前言 本题是一道讲解根号分治思想的论文题(然鹅我并没有找到论文),正 如论文中所说,根号算法--不仅是分块,根号分治利用的思想和分块像 似却又不同,某一篇洛谷日报中说过,分块算法实质上是一种 ...

  5. 题解-洛谷P5410 【模板】扩展 KMP(Z 函数)

    题面 洛谷P5410 [模板]扩展 KMP(Z 函数) 给定两个字符串 \(a,b\),要求出两个数组:\(b\) 的 \(z\) 函数数组 \(z\).\(b\) 与 \(a\) 的每一个后缀的 L ...

  6. 题解-洛谷P4229 某位歌姬的故事

    题面 洛谷P4229 某位歌姬的故事 \(T\) 组测试数据.有 \(n\) 个音节,每个音节 \(h_i\in[1,A]\),还有 \(m\) 个限制 \((l_i,r_i,g_i)\) 表示 \( ...

  7. 题解-洛谷P4724 【模板】三维凸包

    洛谷P4724 [模板]三维凸包 给出空间中 \(n\) 个点 \(p_i\),求凸包表面积. 数据范围:\(1\le n\le 2000\). 这篇题解因为是世界上最逊的人写的,所以也会有求凸包体积 ...

  8. 题解-洛谷P4859 已经没有什么好害怕的了

    洛谷P4859 已经没有什么好害怕的了 给定 \(n\) 和 \(k\),\(n\) 个糖果能量 \(a_i\) 和 \(n\) 个药片能量 \(b_i\),每个 \(a_i\) 和 \(b_i\) ...

  9. 题解-洛谷P5217 贫穷

    洛谷P5217 贫穷 给定长度为 \(n\) 的初始文本 \(s\),有 \(m\) 个如下操作: \(\texttt{I x c}\),在第 \(x\) 个字母后面插入一个 \(c\). \(\te ...

随机推荐

  1. Hystrix Stream的监控页面不显示内容

    打开Hystrix Stream页面,进入后,发现只有一行Unable to connect to Command Metric Stream. 因为springboot的默认路径不是 "/ ...

  2. oracle包package的使用

    创建包 包头: CREATE OR REPLACE PACKAGE test_pkg IS PROCEDURE update_sal(e_name VARCHAR2,newsal NUMBER);  ...

  3. 弹性盒模型中flex-grow 和flex的区别

    在flex弹性盒模型体系中,flex-grow和flex都有对子元素进行放大的作用,但是这两个属性在放大时的计算方法不同,在使用时候要注意,使用正确的放大属性,从而达到自己想要的效果. 先来看下两个属 ...

  4. vim 常用指令-持续更新

    1. 查询文件夹file1内文件数量:ls file1 | wc -l 2. 生成文件夹file1内的文件列表:find file1 -type f > list.txt 3. git管理文件, ...

  5. org.hibernate.LazyInitializationException异常解决办法

    org.hibernate.LazyInitializationException异常failed to lazily initialize a collection...的解决方案使用hiberna ...

  6. 前端日常工作中常用开发小技巧 ---JavaScript

    1.格式化金钱值 const ThousandNum = num => num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, "," ...

  7. Redis系列(十二):数据结构SortedSet跳跃表中基本操作命令和源码解析

    1.SkipList Redis的sortedSet数据结构是有序不重复的(索引为唯一的,数据(score)却可以重复), 跳表是redis的一个核心组件,也同时被广泛地运用到了各种缓存地实现当中,它 ...

  8. 飞越面试官(三)--JVM

    大家好!我是本公众号唯一官方指定没头屑的小便--怕屁林.   JVM,全称Java Virtual Machine,作为执行Java程序的容器,几乎代理了Java内存与服务器内存的交互,可以说是程序拥 ...

  9. day17 装饰器(上)

    目录 一.什么是装饰器 二.为什么要有装饰器 三.无参装饰器的使用 一.什么是装饰器 装饰:是对其他已有的事物添加额外具有一定意义的事物 器:是一种工具,在程序内可以定义成函数 合到一起就是: ​ 装 ...

  10. include文件包含漏洞

    发现allow_url_include 是on状态 既然已经直接包含了phpinfo()是文件,首先搜索了一下allow_url_include,发现是处于打开的状态. 既然 allow_url_in ...