最大异或和(xor)
最大异或和(xor)
题目描述
给定一个非负整数序列{a},初始长度为N。
有M个操作,有以下两种操作类型:
1、A x:添加操作,表示在序列末尾添加一个数x,序列的长度N+1。
2、Q l r x:询问操作,你需要找到一个位置p,满足l<=p<=r,使得:
a[p] xor a[p+1] xor ... xor a[N] xor x 最大,输出最大是多少。
输入
第一行包含两个整数N,M,含义如问题描述所示。
第二行包含N个非负整数,表示初始的序列A。
接下来M行,每行描述一个操作,格式如题面所述。
输出
假设询问操作有T个,则输出应该有T行,每行一个整数表示询问的答案。
样例输入
5 5
2 6 4 3 6
A 1
Q 3 5 4
A 4
Q 5 7 0
Q 3 6 6
样例输出
4
5
6
提示
本题共有10个测试点,每个测试点10分。
对于测试点1-2,N,M<=5。
对于测试点3-7,N,M<=80000。
对于测试点8-10,N,M<=300000。
其中测试点1, 3, 5, 7, 9保证没有修改操作。
对于100%的数据,0<=a[i]<=10^7。
solution
考虑异或满足前缀相减。
答案=1~an~x的异或和异或1~i的异或和
前一部分是定值。
后一部分,我们对于每一个前缀都加进trie树,在trie上贪心即可。
建议写递归写法,注意边界。
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int n,m,rt[],now,cnt;
struct trie{
int ch[],v;
}tr[*];
void ins(int k,int la,int v){
for(int i=;i>=;i--){
tr[k].v=tr[la].v+;
bool t=((v&(<<i))>);
tr[k].ch[!t]=tr[la].ch[!t];
tr[k].ch[t]=++cnt;
k=tr[k].ch[t],la=tr[la].ch[t];
}
tr[k].v=tr[la].v+;
}
int ask(int k,int la,int v){
int ans=;
for(int i=;i>=;i--){
bool t=((v&(<<i))>);t=(!t);
int s1=tr[k].ch[t],s2=tr[la].ch[t];
if(tr[s1].v>tr[s2].v){
ans+=(<<i);k=s1;la=s2;
}
else{
k=tr[k].ch[!t],la=tr[la].ch[!t];
}
}
return ans;
}
int main()
{
cin>>n>>m;
for(int i=,t;i<=n;i++){
scanf("%d",&t);
rt[i]=++cnt;
now^=t;ins(rt[i],rt[i-],now);
}
int rn=n;
for(int i=,t,a,b;i<=m;i++){
char c;scanf(" %c",&c);
if(c=='A'){
scanf("%d",&t);rn++;rt[rn]=++cnt;
now^=t;ins(rt[rn],rt[rn-],now);
}
else {
scanf("%d%d%d",&a,&b,&t);t^=now;
if(b==)printf("%d\n",t);
else {
//cout<<rt[b-1]<<' '<<rt[a-2]<<endl;
printf("%d\n",ask(rt[b-],a->?rt[a-]:,t));
}
}
}
return ;
}
最大异或和(xor)的更多相关文章
- 异或链表(XOR linked list)
异或链表(Xor Linked List)也是一种链式存储结构,它可以降低空间复杂度达到和双向链表一样目的,任何一个节点可以方便的访问它的前驱节点和后继结点.可以参阅wiki 普通的双向链表 clas ...
- 【机器学习】神经网络实现异或(XOR)
注:在吴恩达老师讲的[机器学习]课程中,最开始介绍神经网络的应用时就介绍了含有一个隐藏层的神经网络可以解决异或问题,而这是单层神经网络(也叫感知机)做不到了,当时就觉得非常神奇,之后就一直打算自己实现 ...
- 【ShareCode】不错的技术文章 -- 如何使用异或(XOR)运算找到数组中缺失的数?
如何使用异或(XOR)运算找到数组中缺失的数? 今天给大家分享一篇关于使用XOR(异或)运算找到数组中缺失的数的问题. 在一次Javascript面试中,有这么一个问题: 假设有一个由0到99(包含9 ...
- 关于异或(Xor)的一点笔记
因为博弈论里,尤其实在求sg函数时,经常会用到异或运算,所以我就把网上搜到的一些相关知识和自己的一些理解记下来. 如果出现差错,还请指出,谢谢! 异或:可以简称Xor,可以用数学符号⊕表示,计算机就一 ...
- 异或值 xor
题目描述 给出一个 N 个点的带权无向图,要求从 1 号点到 N 号点的一条路径,使得路径上的边 权异或值最大. 输入格式 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M ...
- 如何理解“异或(XOR)”运算在计算机科学中的重要性?(转自-阿里聚安全)
XOR加密是一种简单高效.非常安全的加密方法 一. XOR 运算 逻辑运算之中,除了 AND 和 OR,还有一种 XOR 运算,中文称为"异或运算". 它的定义是:两个值相同时,返 ...
- 如何通过php 使用异或(XOR)加密/解密文件
laravel代码如下: /** * @param $q * @param $k * @return string 异或加解密 */ public function jiajiemi($q,$k){ ...
- Delphi 异或,英文为exclusive OR,或缩写成xor
异或,英文为exclusive OR,或缩写成xor 异或(xor)是一个数学运算符.它应用于逻辑运算.异或的数学符号为“⊕”,计算机符号为“xor”.其运算法则为: a⊕b = (¬a ∧ b) ∨ ...
- 51nod 1295 XOR key-区间异或最大值-可持久化01Trie树(模板)
1295 XOR key 2 秒 262,144 KB 160 分 6 级题 给出一个长度为N的正整数数组A,再给出Q个查询,每个查询包括3个数,L, R, X (L <= R).求A[L] ...
- 51Nod XOR key —— 区间最大异或值 可持久化字典树
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1295 1295 XOR key 题目来源: HackerRa ...
随机推荐
- phonegap二维码扫描插件
原文出处:http://rensanning.iteye.com/blog/2034026 谈谈我使用这个的体会吧; git地址 https://github.com/wildabeast/Barco ...
- flask实现基于elasticsearch的关键词搜索建议
1.实现效果 2.fuzzy模糊查询和suggest查询 fuzzy模糊查询 GET chaxun/job/_search { "query": { "fuzzy&quo ...
- G - Dreamoon and NightMarket Gym - 101234G 优先队列+思路
题目:题目链接 题意:给出n种食物,食物有自己的价格并且可以自由搭配,每天吃之前没吃过的花费最少的搭配,问第k天的花费. 思路:第k小我们考虑用优先队列处理,虽然n比较大,但由于1 ≤ K ≤ min ...
- 第三章:Web表单
感谢作者 –> 原文链接 本文翻译自 The Flask Mega-Tutorial Part III: Web Forms 这是Flask Mega-Tutorial系列的第三部分,我将告诉你 ...
- aspx页面 按钮不响应回车键
aspx页面在IE浏览器中,页面上的按钮默认都响应回车键,但有的时候我们的文本框可能需要响应回车键,这时我们就不想让按钮再响应回车键,这时我们只需要设置按钮的属性即可. 按钮分为两种,一种是<b ...
- PHP.24-TP框架商城应用实例-后台1-添加商品功能、钩子函数、在线编辑器、过滤XSS、上传图片并生成缩略图
添加商品功能 1.创建商品控制器[C] /www.test.com/shop/Admin/Controller/GoodsController.class.php <?php namespace ...
- laravel5.5路由
目录 1. routes/web.php 2. routes/api.php 3. 重定向路由 4. 路由参数 5. 约束 6. 命名路由 7. 路由组 8 路由模型绑定 9 表单方法伪造 10 访问 ...
- centos使用--排查服务是否可用
端口与服务的关系 一台拥有IP地址的主机可以提供许多服务,比如Web服务.FTP服务.SMTP服务等,这些服务完全通过1个IP地址来实现.那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因 ...
- Django笔记 —— MySQL安装
最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...
- Android FrameWork 概述
Framework是什么 Framework的中文意思是“框架”,在软件开发中通常指开发框架,在一个系统中处于内核层之上,为顶层应用提供接口,被设计用来帮助开发者快速开发顶层应用,而不必关心系统内核运 ...