博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ-4260-Codechef REBXOR(trie树)
阅读量:7240 次
发布时间:2019-06-29

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

Description

 

Input

输入数据的第一行包含一个整数N,表示数组中的元素个数。
第二行包含N个整数A1,A2,…,AN。
 
 

Output

输出一行包含给定表达式可能的最大值。
 

 

Sample Input

5
1 2 3 1 2

Sample Output

6

HINT

 

满足条件的(l1,r1,l2,r2)有:(1,2,3,3),(1,2,4,5),(3,3,4,5)。
对于100%的数据,2 ≤ N ≤ 4*105,0 ≤ Ai ≤ 109。

 

Source

 

题解

自己trie树感觉不太会,练一练(都要NOIP考试了还在学0.0)

其实很多xor的问题都是trie树(记得机房外面还有写着trie树——解决xor问题)

那么这道题我们要怎么做呢?

我们用b[i]表示从左到右,以i为结尾的最大异或和

同理,另一个式子我们也可以这么做

1 #include
2 #define N 400005 3 using namespace std; 4 int n,cnt,len,Max; 5 int p[31]; 6 int a[N],s[N],M[N]; 7 struct node{ 8 int l,r,val; 9 }tr[31*N];10 void get(int x){11 len=0;12 while (x){13 p[++len]=x%2;14 x>>=1;15 }16 }17 void insert(int x){18 int y=1;19 for (int i=31;i>len;i--){20 if (!tr[y].l) tr[y].l=++cnt; 21 y=tr[y].l;22 }23 for (int i=len;i>=1;i--)24 if (p[i]){25 if (!tr[y].r) tr[y].r=++cnt;26 y=tr[y].r;27 } else{28 if (!tr[y].l) tr[y].l=++cnt ;29 y=tr[y].l;30 }31 tr[y].val=x;32 }33 int find(int x){34 int y=1;35 for (int i=31;i>len;i--)36 y=tr[y].r?tr[y].r:tr[y].l;37 for (int i=len;i>=1;i--)38 if (p[i])39 y=tr[y].l?tr[y].l:tr[y].r;40 else41 y=tr[y].r?tr[y].r:tr[y].l;42 return tr[y].val;43 }44 int main(){45 scanf("%d",&n);46 for (int i=1;i<=n;i++)47 scanf("%d",&a[i]);48 int ans;49 cnt=1;50 for (int i=1;i<=n;i++){51 s[i]=s[i-1]^a[i];52 get(s[i]);53 ans=s[i]^find(s[i]);54 M[i]=max(M[i-1],ans);55 insert(s[i]);56 }57 memset(tr,0,sizeof(tr));58 memset(s,0,sizeof(s));59 cnt=1;60 for (int i=n;i>=1;i--){61 s[i]=s[i+1]^a[i];62 get(s[i]);63 ans=(s[i]^find(s[i]))+M[i-1];64 if (ans>Max) Max=ans;65 insert(s[i]);66 }67 printf("%d\n",Max);68 return 0;69 }
View Code

 

转载于:https://www.cnblogs.com/zhuchenrui/p/7805864.html

你可能感兴趣的文章
php04
查看>>
Chrome扩展程序和油猴推荐
查看>>
React and Redux 手册
查看>>
socket(孔、插座 --> 套接字) Socket通信 -- 了解
查看>>
Linux下用wget下载整个网站:
查看>>
CSDN新版Markdown编辑器(Alpha 2.0版)使用示例(文首附源码.md文件)
查看>>
linux 环境配置 安装jdk
查看>>
暑假计划
查看>>
CSS3:用CSS设置多个背景、背景渐变、指定背景大小
查看>>
约束与索引
查看>>
获取页面所有链接的JS
查看>>
leetcode-Palindrome Partitioning II
查看>>
php 下载已经上传好的excel文件出现乱码------解决办法
查看>>
判断单选框选中不成功,$("#xx").attr("checked")undefined
查看>>
React 实现一个漂亮的 Table
查看>>
mysql函数替换域名
查看>>
HDU 1025--LIS算法
查看>>
docker容器访问宿主机IP
查看>>
python- - 函数 - - 迭代器和生成器
查看>>
WebService连接sql serever并使用Android端访问数据
查看>>