我的脑回路可能比较奇怪。

我们对这些询问离线,将所得序列${a}$的后缀和建$n$棵可持久化$trie$。

对于一组询问$(l,r,x)$,我们在主席树上询问第$l$棵树$-$第r$+1$棵树中与$suma[n']\ xor\ x$异或的最大值即可。

这个时间复杂度是$O(n\ log\ a)$的。

 #include<bits/stdc++.h>
#define M 600005
using namespace std; struct trie{int a[],sum=;}a[M*];
int root[M]={},use=;
void updata(int &x,int dep,int Val){
bool k=Val&(<<dep);
a[++use]=a[x]; a[x=use].sum++;
if(dep==-) return;
updata(a[x].a[k],dep-,Val);
}
int query(int x,int y,int Val){
int res=;
for(int i=;~i;i--){
bool k=Val&(<<i); k^=;
int cnt=a[a[x].a[k]].sum-a[a[y].a[k]].sum;
if(cnt) res|=<<i,x=a[x].a[k],y=a[y].a[k];
else x=a[x].a[k^],y=a[y].a[k^];
}
return res;
} int val[M]={};
int n,m;
int nown[M]={},l[M]={},r[M]={},X[M]={},cnt=;
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",val+i);
while(m--){
char op[]; scanf("%s",op);
if(op[]=='A') {scanf("%d",val+(++n)); continue;}
nown[++cnt]=n;
scanf("%d%d%d",l+cnt,r+cnt,X+cnt);
}
for(int i=n;i;i--){
val[i]^=val[i+]; root[i]=root[i+];
updata(root[i],,val[i]);
}
for(int i=;i<=cnt;i++){
printf("%d\n",query(root[l[i]],root[r[i]+],val[nown[i]+]^X[i]));
}
}

【xsy1147】 异或(xor) 可持久化trie的更多相关文章

  1. BZOJ 3261: 最大异或和( 可持久化trie )

    搞成前缀和然后就可以很方便地用可持久化trie维护了.时间复杂度O((N+M)*25) -------------------------------------------------------- ...

  2. 洛谷.5283.[十二省联考2019]异或粽子(可持久化Trie 堆)

    LOJ 洛谷 考场上都拍上了,8:50才发现我读错了题=-= 两天都读错题...醉惹... \(Solution1\) 先求一遍前缀异或和. 假设左端点是\(i\),那么我们要在\([i,n]\)中找 ...

  3. bzoj3261: 最大异或和 可持久化trie

    题意:给定一个非负整数序列{a},初始长度为N. 有M个操作,有以下两种操作类型: 1.Ax:添加操作,表示在序列末尾添加一个数x,序列的长度N+1. 2.Qlrx:询问操作,你需要找到一个位置p,满 ...

  4. [BZOJ4103][Thu Summer Camp 2015]异或运算 可持久化Trie树

    4103: [Thu Summer Camp 2015]异或运算 Time Limit: 20 Sec  Memory Limit: 512 MB Description 给定长度为n的数列X={x1 ...

  5. BZOJ3261: 最大异或和(可持久化trie树)

    题意 题目链接 Sol 设\(sum[i]\)表示\(1 - i\)的异或和 首先把每个询问的\(x \oplus sum[n]\)就变成了询问前缀最大值 可持久化Trie树维护前缀xor,建树的时候 ...

  6. 【bzoj3261】最大异或和 可持久化Trie树

    题目描述 给定一个非负整数序列 {a},初始长度为 N.       有M个操作,有以下两种操作类型:1.A x:添加操作,表示在序列末尾添加一个数 x,序列的长度 N+1.2.Q l r x:询问操 ...

  7. 【bzoj3689】异或之 可持久化Trie树+堆

    题目描述 给定n个非负整数A[1], A[2], ……, A[n].对于每对(i, j)满足1 <= i < j <= n,得到一个新的数A[i] xor A[j],这样共有n*(n ...

  8. [十二省联考2019]异或粽子——可持久化trie树+堆

    题目链接: [十二省联考2019]异或粽子 求前$k$大异或区间,可以发现$k$比较小,我们考虑找出每个区间. 为了快速得到一个区间的异或和,将原序列做前缀异或和. 对于每个点作为右端点时,我们维护出 ...

  9. BZOJ.5338.[TJOI2018]xor(可持久化Trie)

    BZOJ LOJ 洛谷 惊了,18年了还有省选出模板题吗= = 做这题就是练模板的,我就知道我忘的差不多了 询问一就用以DFS序为前缀得到的可持久化Trie做,询问二很经典的树上差分. 注意求询问二的 ...

随机推荐

  1. Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享

    Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享 支付宝十年账单上的数字有点吓人,但它统计的项目太多,只是想看看到底单纯在淘宝上支出了多少,于是写了段脚本,统计任意时间段淘宝订单的消费情况,看 ...

  2. tomcat中如何配置虚拟路径

    第一步:打开server.xml配置文件.在Host节点里写上该行代码: <Context path="/upload" docBase="E:\upload&qu ...

  3. Linux IPC 之信号量

    信号量(也叫信号灯)是一种用于提供不同进程间或一个给定进程的不同线程间同步手段的原语. 信号量是进程/线程同步的一种方式,有时候我们需要保护一段代码,使它每次只能被一个执行进程/线程运行,这种工作就需 ...

  4. java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing,

    缺少一个java包,然后我在这个网址找到了http://central.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1. ...

  5. HDU 2089 不要62 (递推+暴力或者数位DP)

    题意:中文题. 析:暴力先从1到1000000,然后输出就好了. 代码如下: #include <iostream> #include <cstdio> #include &l ...

  6. Quartus调用MOdelsim仿真过程

    quarutsii调用modelsim实际是相对比较简单的.因为不需要选择要编译的库. 调用前的设置:设置调用的工具,也就是下面的Tool name,选择仿真语言,在这里选择为Verilog HDL, ...

  7. 转:ObjectInputStream类和ObjectInputStream类的使用

    ObjectInputStream和ObjectInputStream类创建的对象被称为对象输入流和对象输出流. 创建文件输出流代码: FileOutputStream file_out = new ...

  8. Android-XML格式描述

    XML是W3C公司提出的标准,使用范围非常广阔,在框架的配置,程序的配置,布局文件的定义,网络传输等,无所不在: 以前学Java的时候,对XML的名词定义是,根节点,子节点 等等,而在Android里 ...

  9. El中调用java静态方法

    最近在项目中遇到需要调用静态方法的问题,形如: <c:forEach items="beans" var="bean"> <p>总数:$ ...

  10. Elasticsearch 核心插件Kibana 本地文件包含漏洞分析(CVE-2018-17246)

    不久前Elasticsearch发布了最新安全公告, Elasticsearch Kibana 6.4.3之前版本和5.6.13之前版本中的Console插件存在严重的本地文件包含漏洞可导致拒绝服务攻 ...