题意:给你一个序列(n<=100000),求出一个连续的子序列[i,j]使得ai xor ai+1 xor…… xor aj最大,求出这个最大值(其中每个数<=2^21)

分析:题目和求一段子序列的和或者积很像,只是运算法则改变,所以可以往求子段和、积的方法上面考虑

首先如果设sum[i]=a1 xor a2 xor a3……xor ai,则子序列[i,j]的xor值可以表达为sum[j] xor sum[i-1],这样是O(n^2)的是不行的

有以往的处理经验我们知道,后面那个j一定要枚举的,关键在于如何快速在j前面找到一个i-1使得xor结果最大

而xor最大的含义就是说高位上要尽可能的不相同,于是我们不妨把它们都转成二进制并以最高位开始加入一个0、1组成的Trie树

于是我们的得到一个贪心算法,对每次的j先在Trie中尽可能大找,如当sum[j]=100101时候,我们先找第一层的0(因为要不同才好),然后找第二层的1,……以此类推,不过要注意如果我们希望找的那个不同的在Trie不存在,即以前没有出现过,那么就老老实实的按另一个走吧。最后查询完后可以作为以j为右边的序列的最优值,更新ans,并把sum[j]插入Trie。

复杂度是O(nlogn),完美解决

[USACO]6.1.3 cow xor(二进制+Trie)的更多相关文章

  1. USACO 6.1 Cow XOR

    Cow XORAdrian Vladu -- 2005 Farmer John is stuck with another problem while feeding his cows. All of ...

  2. usaco6.1-Cow XOR:trie树

    Cow XOR Adrian Vladu -- 2005 Farmer John is stuck with another problem while feeding his cows. All o ...

  3. NBUT 1525 Cow Xor(01字典树+前缀思想)

    [1525] Cow Xor 时间限制: 2000 ms 内存限制: 65535 K 问题描述 农民约翰在喂奶牛的时候被另一个问题卡住了.他的所有N(1 <= N <= 100,000)个 ...

  4. [二进制trie][贪心]CSUOJ1216异或最大值

    题目传送门 过了好久,终于重新开始写博客了... 这是一道二进制trie树的模板题. 二进制trie树,理解一下就是一颗二叉树,左右儿子为0或1. 然后每插入一个数就进行一次Find操作. Find: ...

  5. hdu 4825 Xor Sum(trie+贪心)

    hdu 4825 Xor Sum(trie+贪心) 刚刚补了前天的CF的D题再做这题感觉轻松了许多.简直一个模子啊...跑树上异或x最大值.贪心地让某位的值与x对应位的值不同即可. #include ...

  6. USACO 奶牛抗议 Generic Cow Protests

    USACO 奶牛抗议 Generic Cow Protests Description 约翰家的N头奶牛聚集在一起,排成一列,正在进行一项抗议活动.第i头奶牛的理智度 为Ai,Ai可能是负数.约翰希望 ...

  7. HDU 5269 ZYB loves Xor I Trie树

    题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5269 bc:http://bestcoder.hdu.edu.cn/contests/con ...

  8. HDU4825 Xor Sum —— Trie树

    题目链接:https://vjudge.net/problem/HDU-4825 Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Li ...

  9. hdu 4825 Xor Sum trie树

    Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others) Proble ...

随机推荐

  1. Hadoop 文件的数量怎么比block的数量多?

    Total files:    23 Total symlinks:        0 Total blocks (validated):    22 (avg. block size 117723 ...

  2. Java zip and unzip demo

    目录结构如下: import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import ...

  3. gre网络细节

    一.OpenStack网络设备的命名规律: 1.TenantA的router和Linux网络命名空间qrouter名称 root@controller:~# neutron --os-tenant-n ...

  4. Google Map API 使用总结

    Google Map API (一):显示一个最基本的地图 1 实现一个地图:<head>中引用: <script type="text/javascript" ...

  5. excel相关

    1.excel怎样筛选重复数据 打开Excel文件,选中待处理的数据区域,然后分别点击菜单开始--条件格式--突出显示单元格规则--重复值. 确认以Excel默认的格式突出显示重复值.之后,重复的数据 ...

  6. Java虚拟机详解02----JVM内存结构

    主要内容如下: JVM启动流程 JVM基本结构 内存模型 编译和解释运行的概念 一.JVM启动流程: JVM启动时,是由java命令/javaw命令来启动的. 二.JVM基本结构: JVM基本结构图: ...

  7. Sprite Editor 图集切片精灵

    切图需求 假设有一张大的UI的图集,我们想把它里面的小图一张一张地切割出来,如果有plist文件,请查阅我的另一篇文章<还原TexturePacker plist 文件 切开各小图片> 今 ...

  8. IO流的练习5 —— 读取文件中的字符串,排序后写入另一文件中

    需求:已知s.txt文件中有这样的一个字符串:“hcexfgijkamdnoqrzstuvwybpl” 请编写程序读取数据内容,把数据排序后写入ss.txt中. 分析: A:读取文件中的数据 B:把数 ...

  9. css 字体不撑开默认块级元素问题

    问题原因是行高的元素没有随字体大小而改变,设置line-hight属性和字体同时变换

  10. Gradle的安装

    1.Gradle依赖JDK,所以先在机器上安装好JDK,设置好JAVA_HOME与PATH环境变量 2.从官网下载合适的Gradle发行包 3.发行包是一个zip文件,解压后,将 GRADLE_HOM ...