256. 最大异或和(可持续化trie数,位运算,模板,* * )

256. 最大异或和 - AcWing题库

给定一个非负整数序列 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 行,每行描述一个操作,格式如题面所述。

输出格式

每个询问操作输出一个整数,表示询问的答案。

每个答案占一行。

数据范围

N,M≤3×10^5,0≤a[i]≤10^7

输入样例:
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

解析: 

max_id[i]:当下这个树节点 i 的最后一次更新时间

root[i]:第 i 次更新后的字典树的树根

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<math.h>
#include<map>
#include<sstream>
#include<deque>
#include<unordered_map>
#include<unordered_set>
#include<bitset>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<long long, long long> PLL;
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
const int INF = 0x3f3f3f3f;
const LL Mod = 2147483648;
const int N = 6e5 + 10, M = N*25;
int  n, m;
int tr[M][2], max_id[M],idx;
int root[N],s[N];

void insert(int i, int k, int p, int q) {
	if (k < 0) {
		max_id[q] = i;
		return;
	}
	int v = s[i] >> k & 1;
	if (p)tr[q][v ^ 1] = tr[p][v ^ 1];
	tr[q][v] = ++idx;
	insert(i, k - 1, tr[p][v], tr[q][v]);
	max_id[q] = max(max_id[tr[q][0]], max_id[tr[q][1]]);
}

int query(int root,int c,int l) {
	int p = root;
	for (int i = 23; i >= 0; i--) {
		int v = c >> i & 1;
		if (max_id[tr[p][v ^ 1]] >= l)p = tr[p][v ^ 1];
		else p = tr[p][v];
	}
	return c ^ s[max_id[p]];
}

int main() {
	cin >> n >> m;
	max_id[0] = -1;
	root[0] = ++idx;
	insert(0, 23, 0, root[0]);
	for (int i = 1; i <= n; i++) {
		int a;
		scanf("%d", &a);
		s[i] = s[i - 1] ^ a;
		root[i] = ++idx;
		insert(i, 23, root[i-1], root[i]);
	}
	char op[2];
	int l, r, x;
	while (m--) {
		scanf("%s", op);
		if (op[0] == 'A') {
			scanf("%d", &x);
			root[++n] = ++idx;
			s[n] = s[n - 1] ^ x;
			insert(n, 23, root[n - 1], root[n]);
		}
		else {
			scanf("%d%d%d", &l, &r, &x);
			printf("%d\n", query(root[r - 1], s[n] ^ x, l - 1));
		}
	}
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/579134.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Git】分支管理的基本操作

文章目录 理解分支分支的本质主分支创建分支切换分支合并分支fast-forward模式删除分支合并冲突问题 理解分支 分支管理是git的一个核心功能。在git中&#xff0c;分支是用来独立开发于某个功能或者修复某个bug的一种方式。就像是《火影忍者》中的鸣人使用分身去妙蛙山修炼&am…

ansible-copy用法

目录 概述实践不带目录拷贝带目录拷贝 概述 ansible copy 常用用法举例 不带目录拷贝&#xff0c;拷贝的地址要写全 带目录拷贝&#xff0c;拷贝路径不要写在 dest 路径中 实践 不带目录拷贝 # with_fileglob 是 Ansible 中的一个循环关键字&#xff0c;用于处理文件通配符匹…

【强训笔记】day4

NO.1 思路&#xff1a;利用滚动数组&#xff0c;迭代一个Fibonacci数列&#xff0c;给出三个值进行循环迭代&#xff0c;当n<c时&#xff0c;说明n在b和c之间&#xff0c;这里只需要返回c-n和n-b的最小值就可以了。 代码实现&#xff1a; #include<iostream>using n…

BLIP-2论文精读

概述 由于大规模模型的端到端训练&#xff0c;视觉和语言预训练的成本越来越高&#xff0c;BLIP-2是一种通用且高效的预训练策略&#xff0c;可以从现成的冻结的预训练图像编码器和冻结的大型语言模型引导视觉语言预训练。 模型主体框架 BLIP-2采用了一个轻量级的查询转换器Q…

【Docker】Docker的网络与资源控制

Docker网络实现原理 Docker使用Linux桥接&#xff0c;在宿主机虚拟一个Docker容器网桥(docker0)&#xff0c;Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址&#xff0c;称为Container-IP&#xff0c;同时Docker网桥是每个容器的默认网关。因为在同一宿主机内…

什么是外汇杠杆交易?

外汇杠杆交易是目前的外汇交易市场中&#xff0c;投资者进行外汇交易的重要方式&#xff0c;通过这样的交易方式&#xff0c;投资者就有机会进行以小搏大的交易&#xff0c;他们的交易就有可能会更成功&#xff0c;因此&#xff0c;投资者应该对这样的交易方式进行了解&#xf…

【车展直播(1)】电机的知识

背景&#xff0c;最近在2024 北京车展&#xff0c;然后需要做一些直播讲解。 首先需要关注的是电动车的电机。其实这个东西吧&#xff0c;我不能算是完全知道&#xff0c;但是自己做做PWM 控制器&#xff0c;MOS管驱动&#xff0c;做两轮电机Motor 的控制这种基础的工作还是有…

Docker数据管理+镜像的创建

Docker容器数据管理方式 数据卷 数据卷是一个供容器使用的特殊目录&#xff0c;位于容器中&#xff0c;可将宿主的目录挂载到数据卷上&#xff0c;对数据卷的修改操作立即可见&#xff0c;并且更新数据不会影响镜像&#xff0c;从而实现数据在宿主机与容器之间的迁移。数据卷…

C#反射应用

1.根据类名名称生成类实例 CreateInstance后面的参数部分一定要和所构造的类参数数量对应&#xff0c;即使设置参数默认值&#xff0c;也不可省略。 2.只知道类名&#xff0c;需要将该类作为参数调用泛型接口。 3.只知道类名&#xff0c;需要将该类的数组作为参数调用泛型接口…

CentOS yum make cache/clean all 提示yum lock

错误信息 Another app is currently holding the yum lock; waiting for it to exit 问题描述&#xff1a; 已加载插件&#xff1a;fastestmirror Repository base is listed more than once in the configuration Repository updates is listed more than once in the config…

数组和指针经典笔试题讲解

目录 创作不易&#xff0c;如对您有帮助&#xff0c;还望一键三连&#xff0c;谢谢&#xff01;&#xff01;&#xff01; 1.sizeof和strlen的对比 1.1sizeof 1.2strlen 1.3sizeof和strlen对比 2.数组笔试题讲解 数组名的理解 2.1一维数组 2.2字符数组 题目一&#x…

MacOS 文件系统种类及介绍

MacOS 文件系统种类 详细介绍 详细介绍 从图片中我们可以看到一个文件系统选择器的界面&#xff0c;列出了多种不同的文件系统选项。这些文件系统各有其特点和用途&#xff0c;以下是它们之间的主要区别&#xff1a; APFS&#xff1a;Apple File System&#xff0c;是苹果公司为…

移动零 ----双指针

题目链接 题目: 分析: 上述题目, 是将数组分块, 分为前半非零, 后半零, 这种数组分块题我们首先想到双指针 思路: 定义两个指针, 一个cur 一个dest, cur用来遍历数组, dest 指向分界处的第一个零位置, 将数组分块首先让cur 0; dest 0;cur 遍历数组, 如果cur 0, 那么cur…

windows环境下安装Apache

首先apache官网下载地址&#xff1a;http://www.apachelounge.com/download/按照自己的电脑操作系统来安装 这里我安装的是win64 主版本是2.4的apache。 然后解压压缩包到一个全英文的路径下&#xff01;&#xff01;&#xff01;一定一定不要有中文 中文符号也不要有&#xff…

Vue入门到关门之Vue介绍与使用

一、vue框架介绍 1、什么是Vue&#xff1f; Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与…

OpenHarmony语言基础类库【@ohos.util.PlainArray (非线性容器PlainArray)】

PlainArray可用于存储具有关联关系的key-value键值对集合&#xff0c;存储元素中key值唯一&#xff0c;key值类型为number类型&#xff0c;每个key对应一个value。 PlainArray依据泛型定义&#xff0c;采用轻量级结构&#xff0c;集合中key值的查找依赖于二分查找算法&#xf…

65、二分-在排序数组中查找元素的第一个和最后一个位置

思路&#xff1a; 寻找数组中的目标值第一个和最后一个&#xff0c;如果不存在哪儿就是返回-1。 第一种方式直接线性遍历&#xff0c;找到目标值记录当前下标。继续寻找下一个不等于目标值&#xff0c;说明下一个目标值的下标就是结尾。直接返回。 第二种方式通过使用二分法…

《HCIP-openEuler实验指导手册》1.7 Apache虚拟主机配置

知识点 配置步骤 需求 域名访问目录test1.com/home/source/test1test2.com/home/source/test2test3.com/home/source/test3 创建配置文件 touch /etc/httpd/conf.d/vhost.conf vim /etc/httpd/conf.d/vhost.conf文件内容如下 <VirtualHost *.81> ServerName test1.c…

基于Python+Selenium的web自动化测试框架详解

简介 随着Web应用程序的广泛应用和不断发展&#xff0c;Web自动化测试已经成为软件质量保证中的一个重要环节。而PythonSelenium作为一组强大的工具和框架&#xff0c;已经成为Web自动化测试领域中的热门技术之一。PythonSelenium可以帮助我们快速、准确地模拟用户行为和操作&…

电脑教程1

一、介绍几个桌面上面的软件 1、火绒&#xff1a;主要用于电脑的安全防护和广告拦截 1.1 广告拦截 1.打开火绒软件点击安全工具 点击弹窗拦截 点击截图拦截 拦截具体的小广告 2、向日葵远程控制&#xff1a;可以通过这个软件进行远程协助 可以自己去了解下 这个软件不要…