博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【BZOJ】【3166】【HEOI2013】Alo
阅读量:4636 次
发布时间:2019-06-09

本文共 2328 字,大约阅读时间需要 7 分钟。

可持久化Trie+set


  Orz zyf……

  搞区间中次大值不好搞,那么我们就反过来,找一个数,然后看它在哪些区间里是次大值……

  (然而事实上我们并不用真的把这个区间具体是什么找见,只要知道它可以跟哪一段数搞Xor就可以了!

  而这个区间就是……左边第二个比他大的数的位置+1 ~ 右边第二个比它大的数的位置-1

  这中间所有数都可以跟它搞Xor= =,我们总能找到一个相应的区间……

  (我一开始理解成,这个区间就是我们要找的,a[i]为次大数的区间,然而这不是左边有一个比它大的,右边也有一个比它大的吗?但事实上我们是直接找了能跟a[i]搞Xor的区间(并)……

1 /************************************************************** 2     Problem: 3166 3     User: Tunix 4     Language: C++ 5     Result: Accepted 6     Time:796 ms 7     Memory:28112 kb 8 ****************************************************************/ 9  10 //BZOJ 316611 #include
12 #include
13 #include
14 #include
15 #include
16 #include
17 #define rep(i,n) for(int i=0;i
=n;--i)20 #define pb push_back21 using namespace std;22 typedef long long LL;23 inline int getint(){24 int r=1,v=0; char ch=getchar();25 for(;!isdigit(ch);ch=getchar()) if (ch=='-') r=-1;26 for(; isdigit(ch);ch=getchar()) v=v*10-'0'+ch;27 return r*v;28 }29 const int N=100010,M=2000010;30 /*******************template********************/31 32 int n,mx,a[N],t[M][2],rt[N],id[M],tot;33 set
s;34 set
::iterator it;35 typedef pair
pii;36 pii b[N];37 int l[N],r[N];38 39 inline void Ins(int pre,int x,int k){40 int now=rt[k]=++tot; id[tot]=k;41 D(i,30,0){42 int j=(x>>i)&1;43 t[now][j^1]=t[pre][j^1];44 t[now][j]=++tot; id[tot]=k;45 now=tot;46 pre=t[pre][j];47 }48 }49 inline int query(int l,int r,int x){50 int ans=0,now=rt[r];51 D(i,30,0){52 int j=((x>>i)&1)^1;53 if (id[t[now][j]]>=l) ans|=1<
View Code

3166: [Heoi2013]Alo

Time Limit: 20 Sec  Memory Limit: 256 MB
Submit: 524  Solved: 262
[][][]

Description

Welcome to ALO ( Arithmetic and Logistic Online)。这是一个VR MMORPG ,

如名字所见,到处充满了数学的谜题。
现在你拥有n颗宝石,每颗宝石有一个能量密度,记为ai,这些宝石的能量
密度两两不同。现在你可以选取连续的一些宝石(必须多于一个)进行融合,设为  ai, ai+1, …, a j,则融合而成的宝石的能量密度为这些宝石中能量密度的次大值
与其他任意一颗宝石的能量密度按位异或的值,即,设该段宝石能量密度次大值
为k,则生成的宝石的能量密度为max{k xor ap | ap ≠ k , i ≤ p ≤ j}。
现在你需要知道你怎么选取需要融合的宝石,才能使生成的宝石能量密度最大。

Input

第一行,一个整数 n,表示宝石个数。 

第二行, n个整数,分别表示a1至an,表示每颗宝石的能量密度,保证对于i ≠ j有 ai ≠ aj。 
 

Output

输出一行一个整数,表示最大能生成的宝石能量密度。

Sample Input

5
9 2 1 4 7

Sample Output

14

HINT

【样例解释】
选择区间[1,5],最大值为 7 xor 9。
 
 
对于 100%的数据有 1 ≤ n ≤ 50000, 0 ≤ ai ≤ 10^9

Source

[ ][ ][ ]

转载于:https://www.cnblogs.com/Tunix/p/4555583.html

你可能感兴趣的文章
新手学html 第一节:html简介
查看>>
【C】strcpy()需谨慎使用;
查看>>
docker安装nginx容器小记
查看>>
SUSE11 搭建iscsi target 配置
查看>>
5.3linux下C语言socket网络编程简例
查看>>
【PKUSC2019】线弦图【计数】【树形DP】【分治FFT】
查看>>
collections系列
查看>>
Android RecyclerView嵌套EditView实时更新Item数据
查看>>
Android onLoadFinished与onLoaderReset
查看>>
Android ImageView(纯java)
查看>>
Android TabHost中实现标签的滚动以及一些TabHost开发的奇怪问题
查看>>
写文章最难写的是标题
查看>>
JSP动态网站环境搭建应用中的详细步骤(Tomcat和Apache/IIS的整合)
查看>>
[原]详解如何将cocos2dx项目编译到Android平台上的(方式一:Cywin+NDK)
查看>>
git如何解决冲突(代码托管在coding)
查看>>
Tarjan-缩点
查看>>
vue项目创建
查看>>
Gnome3 隐藏标题栏,去除最大化标题栏
查看>>
C#实现反射调用动态加载的DLL文件中的方法
查看>>
git 的安装以及使用:是一个开源的分布式版本控制系统,可以对项目进行版本管理。 早期是linux之父用来管理linux系统源代码的(linux是和windows一样操作系统 开源免费的操作...
查看>>