维护两颗可持久化字典树(当然可以放在一起),第一棵维护每一个点到根的每一位的二进制数量,在其父亲的基础上建立;第二棵维护dfs序上每一个点到第1个点的二进制数量,在其上一个点的基础上建立。

对于询问1,在第二棵上询问该子树对应区间;对于询问2,拆成x~lca和lca~y两段询问,询问时直接贪心即可。

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define s(k,p) tr[k].son[p]
4 #define zt s(k1,p),s(k2,p),x,y-1
5 #define P ((x&(1<<y))>0)
6 #define N 100005
7 struct ji{
8 int nex,to;
9 }edge[N<<1];
10 struct ji2{
11 int sum,son[2];
12 }tr[80*N];
13 int V,E,n,q,p,x,y,z,sz[N],head[N],r[N<<1],in[N],out[N],f[N][21],a[N],id[N];
14 void add(int x,int y){
15 edge[E].nex=head[x];
16 edge[E].to=y;
17 head[x]=E++;
18 }
19 bool pd(int x,int y){
20 return (in[x]<=in[y])&&(out[y]<=out[x]);
21 }
22 int lca(int x,int y){
23 if (pd(x,y))return x;
24 for(int i=20;i>=0;i--)
25 if (!pd(f[x][i],y))x=f[x][i];
26 return f[x][0];
27 }
28 void ins(int k1,int &k2,int x,int y){
29 tr[k2=++V]=tr[k1];
30 tr[k2].sum++;
31 if (y<0)return;
32 bool p=P;
33 ins(zt);
34 }
35 int query(int k1,int k2,int x,int y){
36 if (y<0)return 0;
37 bool p=(tr[s(k1,P^1)].sum<tr[s(k2,P^1)].sum)^P;
38 return (P^p)*(1<<y)+query(zt);
39 }
40 int dfs(int k,int fa){
41 ins(r[fa],r[k],a[k],30);
42 f[k][0]=fa;
43 in[k]=++x;
44 id[x]=k;
45 sz[k]=1;
46 for(int i=1;i<=20;i++)f[k][i]=f[f[k][i-1]][i-1];
47 for(int i=head[k];i!=-1;i=edge[i].nex)
48 if (edge[i].to!=fa)sz[k]+=dfs(edge[i].to,k);
49 out[k]=x;
50 return sz[k];
51 }
52 int main(){
53 scanf("%d%d",&n,&q);
54 memset(head,-1,sizeof(head));
55 for(int i=1;i<=n;i++)scanf("%d",&a[i]);
56 for(int i=1;i<n;i++){
57 scanf("%d%d",&x,&y);
58 add(x,y);
59 add(y,x);
60 }
61 x=0;
62 dfs(1,1);
63 f[1][0]=0;
64 for(int i=1;i<=n;i++)ins(r[i+n],r[i+n+1],a[id[i]],30);
65 for(int i=1;i<=q;i++){
66 scanf("%d%d%d",&p,&x,&y);
67 if (p==1)printf("%d\n",query(r[in[x]+n],r[in[x]+sz[x]+n],y,30));
68 else{
69 scanf("%d",&z);
70 p=f[lca(x,y)][0];
71 printf("%d\n",max(query(r[p],r[x],z,30),query(r[p],r[y],z,30)));
72 }
73 }
74 }

[bzoj5338]xor的更多相关文章

  1. [BZOJ5338][TJOI2018]xor(可持久化Trie)

    可持久化Trie模板题. 建两种可持久化Trie,每个点两棵,一棵对DFS求前缀和,一棵对祖先求前缀和. 或者树剖,不好写多少还多个log. #include<cstdio> #inclu ...

  2. BZOJ5338[TJOI2018]xor——主席树+dfs序

    题目描述 现在有一颗以1为根节点的由n个节点组成的树,树上每个节点上都有一个权值vi. 现在有Q 次操作,操作如下: 1  x y    查询节点x的子树中与y异或结果的最大值 2 x y z     ...

  3. BZOJ5338 [TJOI2018] Xor 【可持久化Trie树】【dfs序】

    题目分析: 很无聊的一道题目.首先区间内单点对应异或值的询问容易想到trie树.由于题目在树上进行,case1将路径分成两段,然后dfs的时候顺便可持久化trie树做询问.case2维护dfs序,对d ...

  4. 可持久化trie(BZOJ5338: [TJOI2018]xor)

    题面 BZOJ Sol 显然是要维护一个区域的 \(trie\) 树,然后贪心 区间 \(trie\) 树??? 可持久化 \(trie\) 树??? 直接参考主席树表示出区间的方法建立 \(trie ...

  5. [BZOJ5338][TJOI2018]xor

    bzoj luogu descirption 现在有一棵以 \(1\) 为根节点的由 \(n\) 个节点组成的树,树上每个节点上都有一个权值 \(v_i\) .现在有 \(Q\) 次操作,操作如下: ...

  6. [LeetCode] Maximum XOR of Two Numbers in an Array 数组中异或值最大的两个数字

    Given a non-empty array of numbers, a0, a1, a2, … , an-1, where 0 ≤ ai < 231. Find the maximum re ...

  7. 二分+DP+Trie HDOJ 5715 XOR 游戏

    题目链接 XOR 游戏 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  8. BZOJ 2115 【Wc2011】 Xor

    Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 ...

  9. xor和gates的专杀脚本

    前段时间的一次样本,需要给出专杀,应急中遇到的是linux中比较常见的两个家族gates和xor. 首先是xor的专杀脚本,xor样本查杀的时候需要注意的是样本的主进程和子进程相互保护(详见之前的xo ...

随机推荐

  1. 5.2 MySQL备份工具

    物理备份: 冷备份:cp tar 逻辑备份: mysqldump mysqldump:是MySQL的客户端命令,通过mysql协议连接至mysql服务器进行备份 -A, --all-databases ...

  2. 改头换面为哪般,最像Android的Windows——Win11升级安装体验

    在过完了十一小长假之后,各位打工人.学僧党可期待的不仅仅是新一轮的工作,Windows11也在10月5日悄悄正式发布,正式版已经面向MSDN订阅用户开放下载. 作为微软金牌合作伙伴,本葡萄已在第一时间 ...

  3. 洛谷2151[SDOI2009]HH去散步(dp+矩阵乘法优化)

    一道良好的矩阵乘法优化\(dp\)的题. 首先,一个比较\(naive\)的想法. 我们定义\(dp[i][j]\)表示已经走了\(i\)步,当前在点\(j\)的方案数. 由于题目中限制了不能立即走之 ...

  4. 洛谷4208 JSOI2008最小生成树计数(矩阵树定理+高斯消元)

    qwq 这个题目真的是很好的一个题啊 qwq 其实一开始想这个题,肯定是无从下手. 首先,我们会发现,对于无向图的一个最小生成树来说,只有当存在一些边与内部的某些边权值相同的时候且能等效替代的时候,才 ...

  5. Pytorch 实现简单线性回归

    Pytorch 实现简单线性回归 问题描述: 使用 pytorch 实现一个简单的线性回归. 受教育年薪与收入数据集 单变量线性回归 单变量线性回归算法(比如,$x$ 代表学历,$f(x)$ 代表收入 ...

  6. RA-28000 账号被锁定的解决办法

    ORA-28000 账号被锁定的解决办法 错误场景:当使用sqlplus进行登录时报错:ORA-28000 账号被锁定.错误原因:由于oracle 11g 在默认在default概要文件中设置了密码最 ...

  7. Java(30)集合五Set

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15228440.html 博客主页:https://www.cnblogs.com/testero ...

  8. CICD 流水线就该这么玩系列之一

    今天给大家分享的是 DevOps 世界中非常流行的一个 GitOps 工具 - Argo CD.如果你还不知道什么是 GitOps,欢迎留言告诉我,根据热度,我会再写一篇详细讲解 GitOps 的文章 ...

  9. 实验6:开源控制器实践——RYU

    实验目的 能够独立部署RYU控制器 能够理解RYU控制器实现软件定义的集线器原理 能够理解RYU控制器实现软件定义的交换机原理 二.实验环境 下载虚拟机软件Oracle VisualBox或VMwar ...

  10. Python super(Todo,self).__init__() TypeError: super() argument 1 must be type, not classobj

    示例如下 class A(): def __init__(self):pass class B(A): def __init__(self): super(A, self).__init__() 当调 ...