传送门

01trie经典题目。


我们可以通过计算每个数作为次小值时对答案的贡献。

显然对于每个iii需要求出一个包含a[i]a[i]a[i]且的区间[l,r][l,r][l,r]且区间所有值都小于a[i]a[i]a[i]

于是将原数组排序之后用双向链表维护。

接着用01trie贪心求出贡献。

#include<bits/stdc++.h>
#define N 200005
#define P 30
using namespace std;
inline int read(){
	int ans=0;
	char ch=getchar();
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
	return ans;
}
int n,rt[N],pre[N],nt[N],ans=0;
struct node{int id,val;}a[N];
inline bool cmp(node a,node b){return a.val<b.val;}
struct Trie{
	int son[N*30][2],siz[N*30],tot;
	inline int insert(int las,int val){
		int p,ret;
		p=ret=++tot;
		for(int i=P;~i;--i){
			son[p][0]=son[las][0],son[p][1]=son[las][1],siz[p]=siz[las]+1;
			int tmp=(val>>i)&1;
			son[p][tmp]=++tot,las=son[las][tmp],p=son[p][tmp];
		}
		siz[p]=siz[las]+1;
		return ret;
	}
	inline int query(int l,int r,int val){
		int ret=0;
		for(int i=P;~i;--i){
			int tmp=(val>>i)&1;
			if(siz[son[r][tmp^1]]-siz[son[l][tmp^1]])ret|=(1<<i),l=son[l][tmp^1],r=son[r][tmp^1];
			else l=son[l][tmp],r=son[r][tmp];
		}
		return ret;
	}
}T;
int main(){
	n=read();
	for(int i=1;i<=n;++i)a[i]=(node){i,read()},pre[i]=i-1,nt[i]=i+1,rt[i]=T.insert(rt[i-1],a[i].val);
	pre[0]=0,nt[0]=1,pre[n+1]=n,nt[n+1]=n+1,sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;++i){
		int tmp=a[i].id,lasl=pre[tmp],lasr=nt[tmp],l=pre[lasl],r=nt[lasr];
		if(l+1<=lasr-1)ans=max(ans,T.query(rt[l],rt[lasr-1],a[i].val));
		if(r-1>=lasl+1)ans=max(ans,T.query(rt[lasl],rt[r-1],a[i].val));
		nt[pre[tmp]]=nt[tmp],pre[nt[tmp]]=pre[tmp];
	}
	printf("%d",ans);
	return 0;
}

2018.09.29 bzoj3166: [Heoi2013]Alo(01trie+双向链表)的更多相关文章

  1. BZOJ3166: [Heoi2013]Alo

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

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

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

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

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

  4. 2018.09.29 Lua

    转自:https://zybuluo.com/lisaisacat/note/636399  谢谢 Lua 基础简明教程 脚本开发   目录 Lua 基础简明教程 目录 注释 Lua 编程 语句块 赋 ...

  5. 2018.09.29 bzoj3885: Cow Rectangles(悬线法+二分)

    传送门 对于第一个问题,直接用悬线法求出最大的子矩阵面积,然后对于每一个能得到最大面积的矩阵,我们用二分法去掉四周的空白部分来更新第二个答案. 代码: #include<bits/stdc++. ...

  6. 2018.09.29 bzoj3039: 玉蟾宫(悬线法)

    传送门 悬线法的板子题. 悬线法只需要保存当期点向下最多多少个,把这个当成一条线,再处理出线绷直之后最多能向左右延展多少就行了. 代码: #include<bits/stdc++.h> # ...

  7. 2018.09.29 bzoj3156: 防御准备(斜率优化dp)

    传送门 斜率dp经典题目. 然而算斜率的时候并没有注意到下标的平方会爆int于是咕咕*2. 这道题我用了两个数组来表示状态. f[i]f[i]f[i]表示最后i个位置倒数第i个放木偶的最优值. g[i ...

  8. 2018.09.29 bzoj3675: [Apio2014]序列分割(斜率优化dp)

    传送门 斜率优化dp经典题目. 首先需要证明只要选择的K个断点是相同的,那么得到的答案也是相同的. 根据分治的思想,我们只需要证明有两个断点时成立,就能推出K个断点时成立. 我们设两个断点分成的三段连 ...

  9. 【可持久化Trie】【set】bzoj3166 [Heoi2013]Alo

    枚举每个数,计算以其为次大数的最大区间,显然,只需要用这个区间的答案 对 答案进行更新即可. 找到每个数右侧.左侧第1.2个比它大的数,然后分类讨论一下即可. 找到的过程中把数sort以后,从大到小把 ...

随机推荐

  1. VisualSVN:允许修改svn提交日志(pre-revpro-change hook)

    有时候需要对之前版本提交的错误的日志信息进行修改或者进行补充描述: 1.在windows 7( 64位 )下使用TortoiseSVN客户端,选中代码目录,点击右键,选择<显示日志> 在出 ...

  2. spring集成多个rabbitMQ

    转自:https://blog.csdn.net/zz775854904/article/details/81092892 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用 ...

  3. 15.Result配置详解

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 说明:在前面的许多案例中我们所用到的Action基本都继承自ActionSu ...

  4. 前台框架vue.js中怎样嵌入 Echarts 组件?

    目前常用的图标插件有 charts,  Echarts, highcharts.这次将介绍 Echarts 在 Vue 项目中的应用. 一.安装插件 使用 cnpm 安装 Echarts cnpm i ...

  5. python之类的相关知识

    面向对象技术简介 类: 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公用的.类变量定义在类中且在函数体之 ...

  6. 如何选择 SQL Server 数据库跟操作系统版本

    简介: 今天老大提需求, 需要一台 Windows 服务器, 需要安装最新版的 SQL Server 数据库.额, 上次搞 Windows 服务器还是4年前的事. 一.啥也没查, 直接下载操作系统.做 ...

  7. locate包的安装

    linux中locate命令可以快速定位我们需要查找的文件,但是在yum中,locate的安装包名为 mlocate(yum list | grep locate可以查看),安装方法: yum -y ...

  8. python-最好大学排名

    # -*- coding: utf-8 -*-"""Created on Mon Apr 3 09:37:52 2017 @author: zuihaodaxuepaim ...

  9. ubuntu ftp 建立匿名用户 [转]

    转自:http://www.cnblogs.com/cocoajin/p/3761414.html ubuntu server vsftpd 匿名用户上传下载及目录设置 1:vsftpd服务器安装: ...

  10. Access denied for user 'root'@'localhost' (using password:YES)解决方法

    Access denied for user 'root'@'localhost' (using password:YES)解决方法 在MySQL的使用过程中,我们可能会碰到“Access denie ...