BZOJ 3166: [Heoi2013]Alo 链表+可持久化trie
链表这个东西非常好用啊 ~
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的更多相关文章
- bzoj 3166 [Heoi2013]Alo 可持久化Trie
3166: [Heoi2013]Alo Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 1227 Solved: 569[Submit][Status ...
- BZOJ 3166: [Heoi2013]Alo
3166: [Heoi2013]Alo Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 923 Solved: 437[Submit][Status] ...
- Bzoj 3166 [Heoi2013] Alo 题解
3166: [Heoi2013]Alo Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 1118 Solved: 518[Submit][Status ...
- BZOJ 3166 HEOI2013 ALO 可持久化trie+st表
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3166(洛谷上也有) 题意概述: 给出一个序列,对于一个区间,其权值为区间中的次大值亦或区 ...
- BZOJ 3166 [HEOI2013]Alo (可持久化01Trie+链表)
题目大意:给你一个长度为$n$的序列,让你找出一段子序列,求其中的 次大值 异或 序列里一个数 能得到的最大值 先对序列建出可持久化$Trie$ 按元素的值从小到大遍历,设当前元素的位置是i,找出它左 ...
- [HEOI2013]ALO(可持久化Trie+链表)
你永远不会相信一个快AFO的选手不会可持久化Trie. 其实异或粽子那题可以用可持久化Trie做,不过我还是没用,用的一般的Trie(其实可持久化是多此一举),于是到现在还是不会可持久化Trie. 这 ...
- BZOJ3166 [Heoi2013]Alo 【可持久化trie树 + 二分 + ST表】
题目 Welcome to ALO ( Arithmetic and Logistic Online).这是一个VR MMORPG , 如名字所见,到处充满了数学的谜题. 现在你拥有n颗宝石,每颗宝石 ...
- 【BZOJ2741】【块状链表+可持久化trie】FOTILE模拟赛L
Description FOTILE得到了一个长为N的序列A,为了拯救地球,他希望知道某些区间内的最大的连续XOR和. 即对于一个询问,你需要求出max(Ai xor Ai+1 xor Ai+2 .. ...
- bzoj 4103: 异或运算 可持久化Trie
题目大意: 给定长度为n的数列X={x1,x2,...,xn}和长度为m的数列Y={y1,y2,...,ym},令矩阵A中第i行第j列的值\(A_{ij} = x_i \text{ xor } y_j ...
随机推荐
- 【rt-thread】2、尝试用ENV添加18b20传感器
尝试用ENV添加18b20传感器 rt-thread能通过env工具添加或者裁剪工程,这里调试的是通过ENV添加18b20传感器. 具体程序实现,可以参考以下资料 https://www.rt-thr ...
- CF468C Hack It! 构造
传送门 让人觉得脑子不够用的构造 考虑对于一个区间\([l,r]\)如何让它调整使得最后的结果恰好加上\(1\). 注意到对于一个\(<10^{18}\)的数\(x\),\(f(x+10^{18 ...
- 1.java小作业-计算1到100的整合-指定输入多少行输出就打印多少行-打印24小时60分钟每一分钟-重载基础练习-面向java编程初学者
可能有和我一样刚开始学习java的小伙伴们, 可以或多或少了解一点别的语言知识,我就是中途转过来的, 明白一点,关键不在语言本身····· 所以面对初学者来说,基础要学好, 下面列举几个没什么难度的小 ...
- python 代码中log表示含义
log表示以e为底数的对数函数符号.其验证代码如下: a=np.log(np.e )print(a)print(np.e)
- Typora基础
Typora下载网址https://typora.io 一级标题 :# 空格 编写内容 二级标题 2*# 空格 内容 typora快捷键 ctrl+1 =一级标题 有序内容 1.+tab (Q旁边的t ...
- Python进阶(十二)----re模块
Python进阶(十二)----re模块 一丶re模块 re模块是python将正则表达式封装之后的一个模块.正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行. #正则表达式: ...
- jquery获取form表单中的数据
$(function() { $('#submit').click(function() { var d = {}; var t = $('form').serializeArray(); //t的值 ...
- Django:内置组件Content-Type
12.Django组件之Content_Type 1.帮助我们生成了一张表,里面有所有表名.这样不再自建表在表中填表名,用Foreignkey获取 2.为了让我们快速进入插入数据,填写一个字段Gene ...
- FlaskCBV视图类
路由视图类 from flask import Flask app = Flask(name) 视图类 Views文件 看views源码 继承最后一个类 导入CBV的视图基类 from flask i ...
- 供应链管理如何提高效率?APS系统成优化引擎
APS系统,虽然它的起兴只有短短的十几年,但是在这段时间里面,它为很多企业解决了很多人工手动.脑力不可解决的问题. 所以APS被誉为供应链优化引擎,APS常常被称为高级计划与排程,但也有称为高级计划系 ...