【Trie】Nikitosh 和异或
2024-10-06 18:02:59
【参考博客】:
LOJ#10051」「一本通 2.3 例 3」Nikitosh 和异或(Trie
【题目链接】:
【题意】:
找出两个不相交区间的异或值相加。
【题解】:
这个题目还是挺有趣的,不是单纯地套模板了。
这个题目类似于 最大字段和问题。
首先我们可以预处理出所有的异或前缀和。
区间的异或值,就是两端点异或前缀和的异或值。
还需要处理出
L[t] = max{ Xor[i,j] } 1<= i,j <= t
R[t] = max{ Xor[i,j] } t<= i,j <= n
分别代表两端点的异或最大值,
问题来了,怎么知道上面两个数组的值呢????
其实我们这里需要一点变通,我们其实求区间异或值,其实是两端点的异或前缀和。
如果我们把所有前缀和看成一些数,进行异或值最大化。不就回到最开始01字典树的应用吗???
不过我们还需要保留过程中的最大值。
即 L[i] = max{ L[i-1] , Insert_Xor(sum[i]) }
可能插入了当前值,但还是达不到前面一点的最大值。所以需要处理一波。
上面的过程不久像极了最大字段和吗???
【代码】:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 4e5+;
const int M = 1e7+3e6; typedef long long ll;
int Son[M][];
int sum[N],Back[N];
int a[N],n,idx;
ll L[N],R[N]; void Insert(int x){
int p = ;
for(int i=;~i;i--){
int t = x >> i & ;
if( !Son[p][t] ) Son[p][t] = ++idx ;
p = Son[p][t];
}
} ll Query(int x){
int res = , p = ;
for(int i=;~i;i--){
int t = x >> i & ;
if( Son[p][t^] ){
res += <<i ;
p = Son[p][t^];
}else{
p = Son[p][t];
}
}
return res ;
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]); Insert();
for(int i=;i<=n;i++){
sum[i] = sum[i-] ^ a[i];
Insert(sum[i]);
L[i] = max( L[i-] , Query(sum[i]) );
} memset( Son , , sizeof Son );
idx = ; Insert();
for(int i=n;i;i--){
sum[i] = sum[i+] ^ a[i];
Insert(sum[i]);
R[i] = max( R[i+] , Query(sum[i]) ) ;
} ll ans = ;
for(int i=;i<=n;i++){
ans = max( ans , L[i]+R[i+] ) ;
}
/*
for(int i=1;i<=n;i++){
printf("%d , %lld\n",i,L[i]);
}
for(int i=n;i;i--){
printf("%d , %lld\n",i,R[i]);
}
*/
printf("%lld\n",ans);
return ;
}
最新文章
- Android源码——Broadcast Receiver
- 依然同上~ 点击获取当前option的value与text
- linux操作mysql数据库常用简单步骤
- WinSCP 连接 Ubuntu 拒绝的问题
- selenium源码分析-webdriver(二)
- IOS雕虫小技
- Jenkins学习六:修改Jenkins用户的密码
- HTML-Canvas02
- mac 连接linux
- poj 2632 Crashing Robots_模拟
- [LeetCode] Palindromic Substrings 回文子字符串
- Python Assert 为何不尽如人意
- python第10天(上)
- qt 画多边形(实现鼠标拖动节点)
- Ubuntu 14.04 安装 sysrepo v0.7.5
- (欧拉公式 很水) Coprimes -- sgu -- 1002
- IDEA2017.3.4破解方式及lombok图文配置详解
- 剑指offer练习
- windows10 查看进程端口的情况
- UVaLive 4043 Ants (最佳完美匹配)