链表这个东西非常好用啊 ~

code:

#include <bits/stdc++.h>
#define N 50010
#define inf 2000400000
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int n,ans,cnt;
int a[N],t[N*35],ch[N*35][2],pre[N],nxt[N],rt[N];
pair<int,int>b[N];
void insert(int x,int pos)
{
int now=rt[pos]=++cnt, last=rt[pos-1];
for(int i=30;i>=0;--i)
{
int o=(x>>i)&1;
ch[now][o^1]=ch[last][o^1];
ch[now][o]=++cnt;
t[ch[now][o]]=t[ch[last][o]]+1;
now=ch[now][o];
last=ch[last][o];
}
}
int query(int sum,int l,int r)
{
--l;
int now=rt[l],last=rt[r],ret=0;
for(int i=30;i>=0;--i)
{
int o=(sum>>i)&1;
if(t[ch[last][o^1]]>t[ch[now][o^1]])
{
ret+=(1<<i);
now=ch[now][o^1];
last=ch[last][o^1];
}
else
{
now=ch[now][o];
last=ch[last][o];
}
}
return ret;
}
int main()
{
// setIO("input");
int i,j,n;
scanf("%d",&n);
int fir=0,last=n+1;
a[fir]=a[last]=inf;
for(i=1;i<=n;++i)
{
pre[i]=i-1, nxt[i]=i+1;
scanf("%d",&a[i]), b[i]=make_pair(a[i],i), insert(a[i],i);
}
sort(b+1,b+1+n);
for(i=1;i<=n;++i)
{
int x=b[i].second;
int l=pre[x],r=nxt[x];
nxt[l]=r,pre[r]=l;
if(l!=fir) ans=max(ans, query(a[x],pre[l]+1,r-1));
if(r!=last) ans=max(ans, query(a[x],l+1,nxt[r]-1));
}
printf("%d\n",ans);
return 0;
}

  

BZOJ 3166: [Heoi2013]Alo 链表+可持久化trie的更多相关文章

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

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

  2. BZOJ 3166: [Heoi2013]Alo

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

  3. Bzoj 3166 [Heoi2013] Alo 题解

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

  4. BZOJ 3166 HEOI2013 ALO 可持久化trie+st表

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3166(洛谷上也有) 题意概述: 给出一个序列,对于一个区间,其权值为区间中的次大值亦或区 ...

  5. BZOJ 3166 [HEOI2013]Alo (可持久化01Trie+链表)

    题目大意:给你一个长度为$n$的序列,让你找出一段子序列,求其中的 次大值 异或 序列里一个数 能得到的最大值 先对序列建出可持久化$Trie$ 按元素的值从小到大遍历,设当前元素的位置是i,找出它左 ...

  6. [HEOI2013]ALO(可持久化Trie+链表)

    你永远不会相信一个快AFO的选手不会可持久化Trie. 其实异或粽子那题可以用可持久化Trie做,不过我还是没用,用的一般的Trie(其实可持久化是多此一举),于是到现在还是不会可持久化Trie. 这 ...

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

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

  8. 【BZOJ2741】【块状链表+可持久化trie】FOTILE模拟赛L

    Description FOTILE得到了一个长为N的序列A,为了拯救地球,他希望知道某些区间内的最大的连续XOR和. 即对于一个询问,你需要求出max(Ai xor Ai+1 xor Ai+2 .. ...

  9. bzoj 4103: 异或运算 可持久化Trie

    题目大意: 给定长度为n的数列X={x1,x2,...,xn}和长度为m的数列Y={y1,y2,...,ym},令矩阵A中第i行第j列的值\(A_{ij} = x_i \text{ xor } y_j ...

随机推荐

  1. LeetCode 5073. 进击的骑士(Java)BFS

    题目:5073. 进击的骑士 一个坐标可以从 -infinity 延伸到 +infinity 的 无限大的 棋盘上,你的 骑士 驻扎在坐标为 [0, 0] 的方格里. 骑士的走法和中国象棋中的马相似, ...

  2. ZYNQ笔记(0):C语言基础知识复习

    ZYNQ的SDK是用C语言进行开发的,C语言可以说是当今理工类大学生的必备技能.我本科学C语言时就是对付考试而已,导致现在学ZYNQ是一脸懵逼.现在特开一帖,整理一下C语言的基础知识. 一.定义 1. ...

  3. 原!linux comm命令文件 比较 输出交集,差集。

    文件内容大致如下: 112805|300011222483|OL海12卓|47397c33e36cdbed26637c50dd305973|2019-08-06 10:50:13|登B录123|suc ...

  4. 《JAVA高并发编程详解》-Thread start方法的源码

    Thread start方法的源码:

  5. WPF 的命令的自动刷新时机——当你 CanExecute 会返回 true 但命令依旧不可用时可能是这些原因

    原文:WPF 的命令的自动刷新时机--当你 CanExecute 会返回 true 但命令依旧不可用时可能是这些原因 在 WPF 中,你可以使用 Command="{Binding Walt ...

  6. loadrunner通过字符串左右边界提取字符串

    /****** *函数名称:strcut *函数说明:通过左边界.右边界,从字符串中截取子字符串 *注意事项:会申请新的内存,需要手动释放 ******/ void strcut(char *strS ...

  7. JavaScript之鼠标事件

    事件三要素: 事件源.事件类型(点击onclick)=function(){ 事件触发后执行的代码 } 案例: function abb(a){ return document.getElementB ...

  8. Python学习日记(三十) Socket模块使用

    Socket(套接字) 套接字是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像文件一样的打开.读写和关闭等操作.套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信.网 ...

  9. ETL 的一些概念

    1. What is a logical data mapping and what does it mean to the ETL team? 什么是逻辑数据映射?它对ETL项目组的作用是什么? 答 ...

  10. 为安卓项目添加FileProvider

    简单记录 android7.0开始出现FileProvider.从一个小白角度看需要注意这几点: Manifest.xml中添加provider节点 添加xml文件 模块的build.gradle中添 ...