【Trie】Nikitosh 和异或
【参考博客】:
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
- #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 ;
- }
【Trie】Nikitosh 和异或的更多相关文章
- 「LOJ#10051」「一本通 2.3 例 3」Nikitosh 和异或(Trie
题目描述 原题来自:CODECHEF September Challenge 2015 REBXOR 1≤r1<l2≤r2≤N,x⨁yx\bigoplus yx⨁y 表示 ...
- Nikitosh 和异或(trie树)
题目: #10051. 「一本通 2.3 例 3」Nikitosh 和异或 解析: 首先我们知道一个性质\(x\oplus x=0\) 我们要求\[\bigoplus_{i = l}^ra_i\]的话 ...
- #10051 Nikitosh 和异或
Nikitosh 和异或 其实题意已经简单的不能再简单了,所以就不讲了. 因为题目中 \(1\leq l_1 \leq r_1 <l_2 \leq r_2\leq N\),所以显然对于最终答案, ...
- Nikitosh 和异或 —— 一道 trie 树的题用可持久化 trie 水 然后翻车了...
题意简介 题目就是叫你找两个不重合的非空区间,使得这两个区间里的数异或后相加的和最大 (看到异或,没错就决定是你了可持久化trie!) 思路 水一波字典树,莫名觉得这题可持久化能过,于是水了一发挂了, ...
- BZOJ4260,LOJ10051 Nikitosh 和异或
题意 给定一个含 \(N\) 个元素的数组 \(A\),下标从 \(1\) 开始.请找出下面式子的最大值:\((A[l_1]\bigoplus A[l_1+1]\bigoplus -\bigoplus ...
- HDU 4825 Xor Sum (trie树处理异或)
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others)Total S ...
- Educational Codeforces Round 12 E. Beautiful Subarrays trie求两异或值大于等于k对数
E. Beautiful Subarrays One day, ZS the Coder wrote down an array of integers a with elements a1, ...
- BZOJ 4260: Codechef REBXOR (trie树维护异或最大值)
题意 分析 将区间异或和转化为前缀异或和.那么[L,R][L,R][L,R]的异或和就等于presum[R] xor presum[L−1]presum[R]\ xor \ presum[L-1]pr ...
- Nikitosh 和异或
题面 设 \(l_{i}\) 为以 \(i\) 为结尾的区间中最大的一段异或值,\(r_{i}\) 为以 \(i\) 为开头的区间中最大的一段异或值. 则有 \[l_{i}=\max\left(l[i ...
随机推荐
- HDU 1114 Piggy-Bank ——(完全背包)
差不多是一个裸的完全背包,只是要求满容量的最小值而已.那么dp值全部初始化为inf,并且初始化一下dp[0]即可.代码如下: #include <stdio.h> #include < ...
- vue后台_登录权限
登录权限控制包含着这么几个方面的含义: 1)不同的权限对应不同的路由 2)侧边栏需要根据不同的权限,异步生成 登录:使用用户名和密码,登录成功后返回用户的token(防止XSS攻击),将此token存 ...
- 绕过本机DNS缓存
--转载注明来源 http://www.cnblogs.com/sysnap/ 0x1 背景 往HOST文件添加127.0.0.1 www.baidu.com, 可以劫持百度的域名.病毒经常篡改HO ...
- Multiline f-strings
多行字符串使用fstring需要注意每行都要加fstring >>> name = "Eric" >>> profession = " ...
- nltk data 离线安装
运行程序时发现如下错误: 在命令行下载速度太慢,因此需要离线安装: 按照:http://www.nltk.org/data.html 中manual installation的方法, 将包下载好后解压 ...
- Nginx内置变量及正则语法
对于很多Nginx初学者来说,配置文件是必须要看懂的.但是当公司的Nginx配置文件放在你面前的时候你总会被一些带着"$"符号和一大推看不懂的的正则给正懵逼.没错带着"$ ...
- OpenResty之ngx_lua模块的加密接口
原文: ngx_Lua模块中的加密api接口 ngx.crc32_short digest = ngx.crc32_short(str) 该方法主要是计算给定字符串 str 的循环校验码(Cyclic ...
- @Transactional注解不生效的原因总结(整理网上和自己遇到的解决方案)
1.问题背景 今天做项目,发现配置好@Transactional后,没有生效,事务没有回滚,即便在网上查资料,也没有解决,好像网上没有人发过我遇见的这种情况的帖子. 2.自己遇到的情况分析 代码结构图 ...
- 安装Mysql-5.7.13脚本
安装Mysql-5.7.13,此脚本最后会查找到临时密码,后面登进数据库中更改密码 [root@ZHONG-LONG javascripts]# vim -mysql.sh #!/bin/bash # ...
- 在Vue文件中引用模块的相对路径“@“符号表示什么意思?
@ 的作用是在你引入模块时,可以使用 @ 代替 /src 目录,避免书写麻烦又易错的相对路径. import model from "@/common/model"; // 默认路 ...