P4735 最大异或和】的更多相关文章

P4735 最大异或和 题目描述 给定一个非负整数序列\(\{a\}\),初始长度为\(N\). 有\(M\)个操作,有以下两种操作类型: A x:添加操作,表示在序列末尾添加一个数\(x\),序列的长度\(N+1\). Q l r x:询问操作,你需要找到一个位置\(p\),满足\(l \le p \le r\),使得: \(a[p] \oplus a[p+1] \oplus \cdots \oplus a[N] \oplus x\)最大,输出最大是多少. 输入输出格式 输入格式: 第一行包含…
嘟嘟嘟 省选竟然考了一个可持久化trie,就挑着我不会的考. 话说考场上我确实写了一个trie的做法,只不过一直没调出来然后就只剩暴力分了. 现在想想实在是太蠢了,明明对算法没有把握,却头脑一热在这题上刚了两个点,为什么就不先把第二题的暴力写写呢---------- 学过主席树,就觉得可持久化trie好像没什么了.大体思路和主席树一样,没有修改的结点直接继承老的结点,修改的就新开结点.所以空间复杂度还是\(O(nlogn)\)的. 对于这一题,我们先求出前缀异或和,然后令\(t = sum[N]…
题面 Bzoj 洛谷 题解 显然,如果让你查询整个数列的最大异或和,建一颗\(01Trie\),每给定一个\(p\),按照二进制后反方向跳就行了(比如当前二进制位为\(1\),则往\(0\)跳,反之亦反). 但是现在要支持在最末尾插入和区间查询,将这颗\(Trie\)可持久化一下就好了(可持久化\(Trie\)敲板) #include <cstdio> #include <cstring> #include <algorithm> using std::min; usi…
学习了一下可持久化trie的有关姿势~其实还挺好理解的,代码也短小精悍.重点在于查询某个历史版本的trie树上的某条边是否存在,同样我们转化到维护前缀和来实现.同可持久化线段树一样,我们为了节省空间继承上一节点未修改的信息,修改的信息我们则新建一条链.节点上我们维护从最初的版本到当前版本这条路径一共出现了多少次,如果查询的最后版本记录这条路径出现的次数 > 查询的第一个版本的上一个版本的这条路径出现的次数,则说明这条路径存在在我们查询的范围内. 对于这道题来说,不大好处理的是查询是一段后缀,而后…
题面:最大异或和 代码: #include<cstdio> #include<cstring> #include<iostream> using namespace std; ,maxm=maxn; ],rt[maxn<<],cnt=,X,L,R,ans; ]; ];}tr[maxn*]; inline void Insert(int u,int x,int a,int t){ )return; <<t))>; tr[x].son[!w]=…
题目描述 给定一个非负整数序列 \(\{a\}\),初始长度为\(n\). 有 \(m\) 个操作,有以下两种操作类型: \(A\ x\):添加操作,表示在序列末尾添加一个数 \(x\),序列的长度 \(n+1\). \(Q\ l\ r\ x\):询问操作,你需要找到一个位置 \(p\),满足\(l \le p \le r\),使得: \(a[p] \oplus a[p+1] \oplus ... \oplus a[N] \oplus x\)最大,输出最大是多少. 输入格式 第一行包含两个整数…
题目链接 题目描述 给定一个非负整数序列{a},初始长度为N. 有M个操作,有以下两种操作类型: A x:添加操作,表示在序列末尾添加一个数x,序列的长度N+1. Q l r x:询问操作,你需要找到一个位置p,满足l≤p≤r,使得: a[p]⊕a[p+1]⊕...⊕a[N]⊕x 最大,输出最大是多少. 输入输出格式 输入格式: 第一行包含两个整数N,M,含义如问题描述所示. 第二行包含 N个非负整数,表示初始的序列A . 接下来 M行,每行描述一个操作,格式如题面所述. 输出格式: 假设询问操…
题目大意:有一串初始长度为$n$的序列$a$,有两种操作: $A\;x:$在序列末尾加一个数$x$ $Q\;l\;r\;x:$找一个位置$p$,满足$l\leqslant p\leqslant r$,使得: $a_p\oplus a_{p+1}\oplus\dots\oplus a_n\oplus x$最大,输出最大是多少. 题解:把序列前缀和,变成$S$,就变成了在$[l-2,r-1]$区间内找一个数$S_p$,使得$S_p\oplus S_n\oplus x$最大.可持久化$trie$ 卡点…
//tire的可持久化 //线段树的可持久化——主席树 //可持久化的前提:本身的拓扑结构在操作时不变 //可以存下来数据结构的所有历史版本 //核心思想:只记录每一个版本与前一个版本不一样的地方 // //s[i]=a[1]^a[2]^a[3]^...^a[n] //a[p]^a[p+1]^...a[N]^x=s[p-1]^s[N]^x //对于s[N]^x //从最高位开始考虑 //如果是1,那么就优先考虑是0的,如果有是0的,那么就把所有当前位为1的舍去,如果没有,再去考虑1的 //如果是…
Trie树入门 貌似很多人会认为\(Trie\)是字符串类型,但是这是数据结构!!!. 详情见度娘 下面开始进入正题. PS:本文章所有代码未经编译,有错误还请大家指出. 引入 先来看一个问题 ​ 给定一本字典中的\(n\)个单词,还有\(m\)个询问.每次询问询问一个单词是否出现在这\(n\)个单词中. 暴力 最简单的就是暴力做法啦,我们直接枚举去判别对应位置,还可以再加点优化. 即:长度不同,肯定不是同一个单词. for(int l;m;m--) { bool flg=false; scan…