可持久化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 3166
  11. #include<cstdio>
  12. #include<set>
  13. #include<cstring>
  14. #include<cstdlib>
  15. #include<iostream>
  16. #include<algorithm>
  17. #define rep(i,n) for(int i=0;i<n;++i)
  18. #define F(i,j,n) for(int i=j;i<=n;++i)
  19. #define D(i,j,n) for(int i=j;i>=n;--i)
  20. #define pb push_back
  21. using namespace std;
  22. typedef long long LL;
  23. inline int getint(){
  24. int r=,v=; char ch=getchar();
  25. for(;!isdigit(ch);ch=getchar()) if (ch=='-') r=-;
  26. for(; isdigit(ch);ch=getchar()) v=v*-''+ch;
  27. return r*v;
  28. }
  29. const int N=,M=;
  30. /*******************template********************/
  31.  
  32. int n,mx,a[N],t[M][],rt[N],id[M],tot;
  33. set<int>s;
  34. set<int>::iterator it;
  35. typedef pair<int,int> 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,,){
  42. int j=(x>>i)&;
  43. t[now][j^]=t[pre][j^];
  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=,now=rt[r];
  51. D(i,,){
  52. int j=((x>>i)&)^;
  53. if (id[t[now][j]]>=l) ans|=<<i; else j^=;
  54. now=t[now][j];
  55. }
  56. return ans;
  57. }
  58. inline int getl(int x){
  59. it=s.find(x);
  60. if (it--==s.begin()) return ;
  61. if (it--==s.begin()) return ;
  62. return *it;
  63. }
  64. inline int getr(int x){
  65. it=s.find(x);
  66. if (++it==s.end()) return n+;
  67. if (++it==s.end()) return n+;
  68. return *it;
  69. }
  70.  
  71. int main(){
  72. #ifndef ONLINE_JUDGE
  73. freopen("3166.in","r",stdin);
  74. freopen("3166.out","w",stdout);
  75. #endif
  76. n=getint();
  77. id[]=-;
  78. Ins(rt[],,);
  79. F(i,,n){
  80. a[i]=getint(); mx=max(mx,a[i]);
  81. Ins(rt[i-],a[i],i);
  82. b[i].first=a[i];
  83. b[i].second=i;
  84. }
  85. sort(b+,b+n+);
  86. D(i,n,){
  87. s.insert(b[i].second);
  88. l[b[i].second]=getl(b[i].second);
  89. r[b[i].second]=getr(b[i].second);
  90. }
  91. int ans=;
  92. F(i,,n) if (a[i]!=mx)
  93. ans=max(ans,query(l[i]+,r[i]-,a[i]));
  94. printf("%d\n",ans);
  95. return ;
  96. }

3166: [Heoi2013]Alo

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

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

[Submit][Status][Discuss]

【BZOJ】【3166】【HEOI2013】Alo的更多相关文章

  1. 【BZOJ 2754 喵星球上的点名】

    Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 2512  Solved: 1092[Submit][Status][Discuss] Descript ...

  2. 【BZOJ】3052: [wc2013]糖果公园

    http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]} ...

  3. 【BZOJ】3319: 黑白树

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...

  4. 【BZOJ】3319: 黑白树(并查集+特殊的技巧/-树链剖分+线段树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 以为是模板题就复习了下hld............................. 然后n ...

  5. 【BZOJ】【1025】【SCOI2009】游戏

    DP/整数拆分 整个映射关系可以分解成几个循环(置换群的预备知识?),那么总行数就等于各个循环长度的最小公倍数+1(因为有个第一行的1~N).那么有多少种可能的排数就等于问有多少种可能的最小公倍数. ...

  6. 【BZOJ】1013: [JSOI2008]球形空间产生器sphere

    [BZOJ]1013: [JSOI2008]球形空间产生器sphere 题意:给n+1个n维的点的坐标,要你求出一个到这n+1个点距离相等的点的坐标: 思路:高斯消元即第i个点和第i+1个点处理出一个 ...

  7. 【BZOJ】1002:轮状病毒(基尔霍夫矩阵【附公式推导】或打表)

    Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图 ...

  8. 【BZOJ】【3697】采药人的路径&【3127】【USACO2013 Open】Yin and Yang

    点分治 Orz hzwer 倒是比较好想到点分治……然而在方案统计这里,我犯了两个错误…… 1.我比较傻逼的想的是:通过儿子来更新父亲,也就是统计以x为根的子树中xxxx的路径有多少条……这样转移. ...

  9. 【BZOJ】【3083】遥远的国度

    树链剖分/dfs序 其实过了[BZOJ][4034][HAOI2015]T2以后就好搞了…… 链修改+子树查询+换根 其实静态树的换根直接树链剖分就可以搞了…… 因为其实只有一样变了:子树 如果roo ...

  10. 【BZOJ】【2434】【NOI2011】阿狸的打字机

    AC自动机+DFS序+BIT 好题啊……orz PoPoQQQ 大爷 一道相似的题目:[BZOJ][3172][TJOI2013]单词 那道题也是在fail树上数有多少个点,只不过这题是在x的fail ...

随机推荐

  1. varnish状态引擎1

    vcl: state engine:各引擎之间存一定程度上的相关性:前一个engine如果可以有多种下游engine,则上游engine需要用return指明 要转移的下游engine vcl_rec ...

  2. MIS2000 Lab,我的IT人生与职场--从零开始的前十五年 与 我的微创业

    http://www.dotblogs.com.tw/mis2000lab/archive/2014/09/16/ithome_2014_ironman.aspx [IT邦幫忙]鐵人賽 -- MIS2 ...

  3. C#之匿名类型与隐式局部变量

    一.匿名类型 下面一段代码展示了如何定义并且使用匿名类型: static void Main(string[] args) { var patent1 = new { Title = "Ne ...

  4. 第六章 类型(class)和成员基础

    1. 概述 本章讲述如何在一个类型中定义不同种类的成员. 2. 名词解释 3. 主要内容 3.1 类型的各种成员 在一个类型中,可以定义0个或多个以下种类的成员: ① 常量:常量就是指出数据值恒定不变 ...

  5. python自学笔记一

    之前看过一段时间的小甲鱼零基础自学python,b站上有高清免费资源[av4050443],但是作为零基础实在学得艰难,下载了python核心编程pdf,在这里做一些笔记. 虽然使用的是第二版的教材, ...

  6. uva 11538 Chess Queen<计数>

    链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&am ...

  7. mysql外键设置(待测试)

    外键的定义语法:[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)    REFERENCES tbl_name (index_col ...

  8. C语言中断言ASSERT

    我一直以为assert仅仅是个报错函数,事实上,它居然是个宏,并且作用并非"报错". 在经过对其进行一定了解之后,对其作用及用法有了一定的了解,assert()的用法像是一种&qu ...

  9. Lex+YACC详解

    1. 简介 只要你在Unix环境中写过程序,你必定会邂逅神秘的Lex&YACC,就如GNU/Linux用户所熟知的Flex&Bison,这里的Flex就是由Vern Paxon实现的一 ...

  10. 一篇文章教你读懂Makefile

    makefile很重要      什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professiona ...