Luogu4735 最大异或和

题目蓝链

Description

给你一个序列,你需要支持以下两个操作:

  1. A x: 在序列尾部添加一个整数\(x\),序列的长度增加\(1\)
  2. Q l r x: 询问操作,你需要找到一个位置\(p \in [l, r]\),使得:\(x \bigoplus a_p \bigoplus a_{p + 1} \bigoplus \ldots \bigoplus a_n\)最大,输出最大值是多少

Solution

首先我们需要打一个可持久化的\(trie\)树来维护\(a_i\)的前缀和,这样我们就可以快速在一段区间对应的\(trie\)树上查询,查询的时候我们只需要贪心的找就可以了

另外,我们需要把询问的式子转化一下
\[ x \bigoplus a_p \bigoplus a_{p + 1} \bigoplus \ldots \bigoplus a_n = (x \bigoplus all) \bigoplus a_1 \bigoplus a_2 \bigoplus \ldots \bigoplus a_{p - 1} \]
由于对于当前的询问,\(x \bigoplus all\)为定值,所以我们只需要在\(trie\)树上找到一个\(a_1 \bigoplus a_2 \bigoplus \ldots \bigoplus a_{p - 1}\),使其与\(x \bigoplus all​\)的异或和最大即可

Code

#include <bits/stdc++.h>using namespace std;#define fst first
#define snd second
#define mp make_pair
#define squ(x) ((LL)(x) * (x))
#define debug(...) fprintf(stderr, __VA_ARGS__)typedef long long LL;
typedef pair<int, int> pii;template<typename T> inline bool chkmax(T &a, const T &b) { return a < b ? a = b, 1 : 0; }
template<typename T> inline bool chkmin(T &a, const T &b) { return a > b ? a = b, 1 : 0; }inline int read() {int sum = 0, fg = 1; char c = getchar();for (; !isdigit(c); c = getchar()) if (c == '-') fg = -1;for (; isdigit(c); c = getchar()) sum = (sum << 3) + (sum << 1) + (c ^ 0x30);return fg * sum;
}const int maxn = 3e5 + 10;
const int inf = (1 << 24) - 1;int n, m, a[maxn << 1], rt[maxn << 1];namespace ST {struct node {int ls, rs, v;}A[maxn << 6];
#define ls(x) A[x].ls
#define rs(x) A[x].rsint cnt;void change(int &nrt, int rt, int l, int r, int x) {A[nrt = ++cnt] = A[rt], ++A[cnt].v;if (l == r) return;int mid = (l + r) >> 1;if (x <= mid) change(ls(nrt), ls(rt), l, mid, x);else change(rs(nrt), rs(rt), mid + 1, r, x);}int query(int x, int y, int l, int r, int v) {if (l == r) return l;int mid = (l + r) >> 1, len = r - mid;if (v <= mid) {if (A[ls(y)].v - A[ls(x)].v) return query(ls(x), ls(y), l, mid, v);return query(rs(x), rs(y), mid + 1, r, v + len);} else {if (A[rs(y)].v - A[rs(x)].v) return query(rs(x), rs(y), mid + 1, r, v);return query(ls(x), ls(y), l, mid, v - len);}return 0;}
}int main() {
#ifdef xunzhenfreopen("xor.in", "r", stdin);freopen("xor.out", "w", stdout);
#endifn = read(), m = read();for (int i = 1; i <= n; i++) {a[i] = a[i - 1] ^ read();ST::change(rt[i], rt[i - 1], 0, inf, a[i - 1]);}for (int i = 1; i <= m; i++) {static char s[10];scanf("%s", s);if (s[0] == 'A') {++n, a[n] = a[n - 1] ^ read();ST::change(rt[n], rt[n - 1], 0, inf, a[n - 1]);} else {int l = read(), r = read(), x = read() ^ a[n];printf("%d\n", ST::query(rt[l - 1], rt[r], 0, inf, inf ^ x) ^ x);}}return 0;
}

转载于:https://www.cnblogs.com/xunzhen/p/10332003.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring-jdbc:JdbcTemplate使用简介

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 为了使 JDBC 更加易于使用,Spring 在 JDBCAPI 上定义了一个抽象层, 以此建立一个JDBC存取框架. 作为 SpringJDBC 框架的核心, JDBC 模板…

Java多线程编程:变量共享分析(Thread)

Java多线程编程&#xff1a;变量共享分析&#xff08;Thread&#xff09; Java 创建线程的两种方法 此处只简单讲下自己对java多线程变量共享的理解&#xff1a; 按照进程和多线程的原理&#xff0c;同一进程内的多个线程之间的地址空间是共享的&#xff08;除去ThreadLocal&a…

嘉益仕(Litns)带您读懂MES系统:选型篇

自从智能制造概念提出以来&#xff0c;制造执行系统MES在国内掀起了新一波的热潮。众多企业在技术发展、政策导向和自身需要的推动下&#xff0c;纷纷上马MES请添加链接描述项目。 由此也带动了MES软件开发企业的快速发展。一夜之间MES软件开发企业遍地开花&#xff0c;MES产品…

[WPF]xml序列化以及反序列化数据

代码 XML序列化工具类 public static class XMLHelper{/// <summary>/// 将对象序列化为指定的文件名/// </summary>/// <typeparam name"T"></typeparam>/// <param name"obj"></param>/// <param name"fil…

多线程的那点儿事

1. 多线程的那点儿事&#xff08;基础篇&#xff09; 多线程编程是现代软件技术中很重要的一个环节。要弄懂多线程&#xff0c;这就要牵涉到多进程&#xff1f;当然&#xff0c;要了解到多进程&#xff0c;就要涉及到操作系统。不过大家也不要紧张&#xff0c;听我慢慢道来。…

Android应用开发—AsyncTask

摘录自 Android 多线程—–AsyncTask详解 AsyncTask AsyncTask&#xff1a;异步任务&#xff0c;从字面上来说&#xff0c;就是在我们的UI主线程运行的时候&#xff0c;异步的完成一些操作。AsyncTask允许我们的执行一个异步的任务在后台。我们可以将耗时的操作放在异步任务当…

std::shared_ptr之deleter的巧妙应用

本文由作者邹启文授权网易云社区发布。std::shared_ptr一次创建&#xff0c;多处共享&#xff0c;通过引用计数控制生命周期。 实例 在邮箱大师PC版中&#xff0c;我们在实现搜索时&#xff0c;大致思路是这样的&#xff1a; 每一个账号都有一个SearchFlow&#xff0c;搜索开始…

js - 执行上下文和作用域以及闭包

首先&#xff0c;咱们通常被"执行上下文"&#xff0c;"执行上下文环境"&#xff0c;"上下文环境"&#xff0c;"执行上下文栈"这些名词搞混。那我们一一来揭秘这些名字的含义。 这一块一直比较晦涩难懂&#xff0c;还是需要仔细去斟酌斟…

Spring之JDBCTemplate

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、Spring对不同的持久化支持&#xff1a; Spring为各种支持的持久化技术&#xff0c;都提供了简单操作的模板和回调 ORM持久化技术模…

从蚂蚁金服实践入手,带你深入了解 Service Mesh

本文整理自蚂蚁金服高级技术专家敖小剑在 QCon 上海 2018 上的演讲。我是来自蚂蚁金服中间件团队的敖小剑&#xff0c;目前是蚂蚁金服 Service Mesh 项目的 PD。我同时也是 Servicemesher 中国技术社区的创始人&#xff0c;是 Service Mesh 技术在国内最早的布道师。我今天给大…

Android应用开发—FragmentManager如何管理fragments

本文主要摘录自Android中使用FragmentManager管理fragments 和 浅谈FragmentManager与fragment之一二事 先讲下自己对fragment的理解&#xff1a; 对于fragment&#xff0c;有太多官方文档和博文来介绍&#xff0c;此处不做转述&#xff1a;我感觉android提供fragment这种组件…

数组指针 和 指针数组

最近发现公司有些人说怎样区分 数组指针 和 指针数组 &#xff1f; 其实 很简单&#xff1b; 数组指针&#xff0c; 先是&#xff08;定语 &#xff09; &#xff08;主体&#xff09;&#xff0c; &#xff08;定语 数组&#xff09; &#xff08;主体 指针&#xff09…

在云服务器上注意GeoServer和ShadowDataMap的跨域设置

在云服务器上注意GeoServer和ShadowDataMap的跨域设置 1、对于支持cors的网络资源 可以在ShadowDataMap的devserverconfig.json里设置相应的跨域资源 提示&#xff1a;geoserver发布的地图服务虽然同在一个服务器上&#xff0c;但是端口不一样&#xff0c;同样需要设置跨域 如&…

Guava ImmutableCollection简介

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 ImmutableCollection代码定义 GwtCompatible(emulatedtrue) public abstract class ImmutableCollection<E> extends AbstractCo…

Todo List

fragment里面如何处理back按键事件。 fragment里面无法Override onBackPressed接口&#xff0c;如何优雅的处理back press事件&#xff1f;activity如何获取当前活跃的fragment对象。异步网络请求如何改造成rxjava&#xff0c;rxjava有设置运行线程的能力&#xff0c;异步请求…

常见的几种负载均衡算法

1、轮询将所有请求&#xff0c;依次分发到每台服务器上&#xff0c;适合服务器硬件相同的场景。优点&#xff1a;服务器请求数目相同&#xff1b; 缺点&#xff1a;服务器压力不一样&#xff0c;不适合服务器配置不同的情况&#xff1b; 2、随机请求随机分配到各台服务器上。优…

基于 Token 的身份验证方法

基于 Token 的身份验证方法 使用基于 Token 的身份验证方法&#xff0c;在服务端不需要存储用户的登录记录。大概的流程是这样的&#xff1a;客户端使用用户名跟密码请求登录 服务端收到请求&#xff0c;去验证用户名与密码 验证成功后&#xff0c;服务端会签发一个 Token&…

Android应用开发-图片加载库Glide

Glide Picasso和Glide之间的区别&#xff1a; Picasso 仅仅缓存了全尺寸的图像&#xff1b;然而 Glide 缓存了原始图像&#xff0c;全分辨率图像和另外小版本的图像。

excel 表格导入 - java 实现

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 import com.alibaba.druid.support.json.JSONUtils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; imp…

C语言 API

MySQL的C语言API接口 1、首先当然是连接数据库&#xff0c;函数原型如下&#xff1a; MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned…