01字典树求异或最大值与最小值模板(带删除)

3.Trie树--求最大异或对 关于Trie树的一个用法,求最大异或对 阅读详情
异或求最小值模板
#include <bits/stdc++.h>  
using namespace std;  
const int maxn=300005;  
int n,m;  
int a[maxn],b[maxn];  
int ch[30*maxn][2];  
int val[30*maxn];  
int sz;  
void insert(int num){  
    int u=0;  
    for(int i=29;i>=0;i--){  
        int c=((num>>i)&1);
        if(!ch[u][c]){  
            ch[u][c]=++sz;  
        }  
        u=ch[u][c]; 
        val[u]++;  
    }  
}  
 void remove(int num)
 {
 	int u=0;
 	for(int i=29;i>=0;i--)
 	{
 		int c=((num>>i)&1);
 		int pre = u;
 		u = ch[u][c];
 		if(--val[u]==0) ch[pre][c]=0;
 	}
 }
  
int query(int num){  
    int p=0,v=0;
    for(int i=29;i>=0;i--)
    {
    	int c=((num>>i)&1);
    	if(ch[p][c])p=ch[p][c];
    	else 
    	{
    		p=ch[p][c^1];
    		v+=(1<<i);
    	}
    }
    return v; 
}  

异或求最大值模板:

#include <bits/stdc++.h> 
using namespace std;  
#define Memset(x, a) memset(x, a, sizeof(x))   
#define _for(i,a,b) for(int i=a;i<=b;i++)
const int maxn = 600007;//集合中的数字个数  
int ch[32*maxn][2];         //节点的边信息  
long long val[32*maxn];            //节点存储的值  
long long a[maxn];
int sz,q,n;                     //树中当前节点个数  
long long num;  
  
void init(){  
    Memset(ch[0],0);           //树清空  
    sz=1;  
}  
  
void _insert(long long a){  
    int u=0;  
    for(int i=32;i>=0;i--){  
        int c=((a>>i)&1);  
        if(!ch[u][c]){  
            Memset(ch[sz],0);  
            ch[u][c]=sz++;  
        }  
        u=ch[u][c];  
        ++val[u];  
    }  
}  
  
void _delete(long long a){  
  int u=0;  
  for (int i=32; i>=0; --i){  
      int c=((a>>i)&1);  
      u=ch[u][c];  
      --val[u];  
  }  
}  
  
long long query(long long a){     
    int u=0;  
    long long ans=0;  
    for(int i=32;i>=0;i--){  
        int c=((a>>i)&1);  
        if (c==1){  
            if (ch[u][0] && val[ch[u][0]]){  
                ans+=1<<i;  
                u=ch[u][0];  
            }  
            else  
                u=ch[u][1];  
        }  
        else{  
            if (ch[u][1] && val[ch[u][1]]){  
                ans+=1<<i;  
                u=ch[u][1];  
            }  
            else  
                u=ch[u][0];  
        }  
    }  
    return ans;  
}  

01字典树小结 简介 010101字典树,就是将字典树中的字符aaa ~ zzz换为二进制的0/10/10/1,得以存储数的二进制形式。 对于结点uuu,有代表下一位为000的左儿子:ch[u][0]ch[u][0]ch[u][0],代表下一位为111的右儿子:ch[u][1]ch[u][1]ch[u][1] 而字典树的根(u=0u=0u=0)表示最高位+1+1+1位,故其代表0;字典树的叶结点vvv则表示最低位... 阅读详情

相关推荐

01字典树专题

以前一直以为字典树没有多少用,但是最近一直碰到(难道是以前刷题太少的原因么),其中有一类问题叫做01字典树问题,它是用来解决xor的有力武器,通常是给你一个数组,问你一段连续的异或和最大是多少,正常思路贪心dp啥的都会一头雾水,但是用01字典树就能很快的解决,实现起来也十分方便。 贴一个01字典树的普遍模版int ch[32*MAX][2]; LL val[32*MAX]; int sz;void

Miracle_ma的专栏 4293

[AcWing] 143. 最大异或对(C++实现)---trie例题

[AcWing] 143. 最大异或对(C++实现)---trie例题1. 题目2. 读题(需要重点注意的东西)3. 解法4. 可能有帮助的前置习题5. 所用到的数据结构与算法思想6. 总结 1. 题目 2. 读题(需要重点注意的东西) 思路: 异或: 如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。(相同为0,不同为1) 如 1(十进制) = 0001(2进制), 2 = 0010, 3 = 0011 1 ⊕ 2 = 0011 = 3, 1 ⊕ 3 = 0010 , 2 ⊕

cloud的博客 982

干扰管理学习日志4-------信道估计方法 LS(最小二乘)、MMSE(最小均方误差)

信道估计,就是从接收数据中将假定的某个信道模型的模型参数估计出来的过程。如果信道是线性的话,那么信道估计就是对系统冲激响应进行估计。需强调的是信道估计是信道对输入信号影响的一种数学表示,而“好”的信道估计则是使得某种估计误差最小化的估计算法。本文主要讲述非盲信道估计中的LS估计和MMSE估计。LS全称为,即估计的信道参数与实际信道参数的差,进行平方求和后得到的误差累积最小。MMSE估计是LS估计的改进,在LS估计的最终结果的基础上乘以加权矩阵,使之与实际信道参数更为接近。

taiyuezyh的博客 1万+

线性基-求异或最大,最小,第K小

定义: 基:在线性代数中,基(也称为基底)是描述、刻画向量空间的基本工具。向量空间的基是它的一个特殊的子集,基的元素称为基向量。向量空间中任意一个元素,都可以唯一地表示成基向量的线性组合。如果基中元素个数有限,就称向量空间为有限维向量空间,将元素的个数称作向量空间的维数。 同样的,线性基是一种特殊的基,它通常会在异或运算中出现,它的意义是:通过原集合S的某一个最小子集S1使得S1内元素相互异或...

weixin_43154720的博客 4420

创建可视化机房

(3)窗户位置创建好以后需要对窗户的墙面镂空位置进行修补,具体操作为,选中镂空位置的顶点(这里必须是选择一个平面的顶点,不要跨平面选择),实际操作如下图:选择点以后,鼠标右键,选择【从顶点创建边/面】,或者按F键,随后对其他镂空位置进行相同操作;(2)将【物体模式】修改为【编辑模式】,选中-x对应面的所有顶点,移动顶点位置,其他放小调整按照同理,找到选中对应面的所有顶点,移动位置即可;调整动画事件轴上的线,选中关键帧的时间,调整模型的位置或者旋转角度,具体根据插入关键帧菜单选择的项进行模型的相关调整。

SmileBu丿㦌的博客 2068

【Matlab/simulink/carsim】再生制动

【Matlab/simulink/carsim】再生制动

weixin_62311849的博客 621

区间子集最大/最小异或和问题(线性基,树上差分)

闲话 有这样一个问题——一个长度为\(n\)的序列\(a_1-a_n\),\(q\)个询问,每次询问\(l,r\),选出\(\{a_l,a_{l+1}...a_{r}\}\)中一个子集使得子集内元素异或和最大/小。 第一次出现在HNOI模拟赛,当时的\(n,q\)只有大概\(3*10^4\)还是\(10^5\)的样子。然后毫不犹豫的写了个\(n\log^3n+q\log^2n\)的线性基...

a83229442的博客 1013

Python实战:基于PyG和Stable-Baselines3复现柔性车间调度算法(附数据集)

本文提供了一份基于图神经网络与深度强化学习的柔性车间调度实战指南。通过PyTorch Geometric构建异构图表示车间状态,并利用Stable-Baselines3中的PPO算法训练调度智能体,详细介绍了从环境建模、网络设计到训练评估的完整代码实现,帮助开发者构建可复用的工业级智能调度系统。

ansible6ops的博客 608

最小异或对

给出一个多重集合,每次可以加一个数,删一个数,或者询问从集合中选出两个数,使其异或和最小。3.如果子树内只有一个元素,记录其值。1.该节点子树内的答案。2.子树内的元素的个数。输出每个询问的答案。

weixin_60896526的博客 239

MMWCAS-DSP-EVM与AWR2243实战:从开箱到数据采集的完整避坑指南

本文提供了MMWCAS-DSP-EVM与AWR2243毫米波雷达评估板从开箱、软硬件准备、固件烧录到数据采集的完整实战指南。重点解析了硬件连接、软件版本匹配、固件烧录、网络配置及MMWave Studio GUI操作等关键步骤,并汇总了常见问题排查方法,帮助开发者快速上手并规避常见陷阱。

algae的博客 504

CAPL实战:从零构建HEX文件解析器,赋能UDS刷写

本文详细介绍了如何使用CAPL从零构建HEX文件解析器,以支持UDS刷写操作。通过解析HEX文件格式、设计状态机、优化数据结构与算法,实现高效准确的固件数据处理,并提供了与UDS刷写流程对接的工程化实践建议。

weixin_28726391的博客 444

C++算法题 # 27 最大异或对

题目描述 在给定的 N 个整数 A1,A2……AN 中选出两个进行 xor(异或)运算,得到的结果最大是多少? 输入格式 第一行输入一个整数 N。 第二行输入 N 个整数 A1~AN。 输出格式 输出一个整数表示答案。 数据范围 1≤N≤105, 0≤Ai<231 输入样例: 3 1 2 3 输出样例: 3 思路 做这种题首先都要知道暴力方法如何去做,然后再进行时间上的优化。 以下笔记为acwing视频截图: 代码示例 暴力: #include <iostream> using n

Solkatt's Blog 406

005、开关电源中的基本拓扑结构简介

本文介绍了开关电源设计中常见拓扑结构的特性与选型经验。文章从实际炸机案例入手,强调深入理解拓扑的重要性,详细分析了Buck、Boost、Buck-Boost等非隔离拓扑以及反激、正激、半桥、全桥、LLC等隔离拓扑的工作原理、设计要点和典型误区,重点指出各拓扑的电压/电流应力、效率瓶颈和常见设计错误。作者根据多年经验总结出不同功率等级和输入输出条件下的拓扑选型原则,并强调细节设计对成败的决定性影响。文章通过大量工程实例说明,正确的拓扑选择和参数计算是电源设计成功的基础,而忽略基础原理将导致反复修改甚至炸机风险

Jack010169的博客 224

C++算法题 & 最大异或对 & trie树

题目 题目来源AcWing第143题 在给定的 N 个整数 A1,A2……AN 中选出两个进行 xor(异或)运算,得到的结果最大是多少? 输入格式 第一行输入一个整数 N。 第二行输入 N 个整数 A1~AN。 输出格式 输出一个整数表示答案。 数据范围 1 ≤ N ≤ 105, 0 ≤ Ai <231 输入样例: 3 1 2 3 输出样例: 3 解题思路 首先可以很容易想到暴力枚举的办法 for (int i = 0; i < n; i++) { for (int j =

weixin_51522849的博客 305

【雷达通信】雷达信号处理仿真【含Matlab源码 2509期】

雷达信号处理仿真 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 904

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

01字典树求最大异或最小异或&&删除操作&&HDU4825 Xor Sum&& Codeforces Round #470 (rated, Div. 1)C. Perfect Security

01字典树就是普通的字典树加上贪心策略的查找,如果是求最大异或值,则每次都去找跟自己的那一位异或为1的,求最小值则相反。 例题:最大异或。 HDU4825 Code: #include &amp;lt;bits/stdc++.h&amp;gt; #define INF 0x3f3f3f3f using namespace std; const int AX = 3e5+66; int a[AX]; typ...

Dave_lzw的博客 1015

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

01字典树 详解(模板,应用,进阶)

01字典树是一棵最多31层的二叉树,其每个节点的两条边分别代表二进制的某一位的值为0还是1.将某个路径上的值连起来就得到一个二进制串

w20221013的博客 1426

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

使用异或运算和与运算求取二者最大值和最小值(不使用判断语句求二者最小值)

(y^(x^y)&-(x         如果x         如果x>y;则根据运算规则有,-(x 综上所述,所以这个式子返回的是x和y的最小值。 经过以上的分析,我们可以很快推导出使用这些位运算计算二者最大值的方法,即(y^(x^y)&(x

gukesdo的专栏 3347

[AcWing]143. 最大异或对

算法标签 Trie字典树贪心 来源 《算法竞赛进阶指南》 题目简叙 思路 使用二叉树的结构来表示整个插入和查询过程: 代码 #include<iostream> using namespace std; const int N=1e5+10; int tree[N*31][2]; int idx,p; void insert(int x){ p=0; for(int i=30;~i;i--){//这里是30的原因是因为限制从0到30,我们采用高位优先,这样可以从大值直接判

代码中枢:软件工程理论与实践的桥梁 456

最大异或和(01字典树)

01字典树就是将数字转换为二进制(01)建树。通常用来求最大异或值问题。建树:if......else其中的语句相当于异或的过程,有不相同的异或为1,相同的为0.例题:在给定的 N 个整数 A1,A2……AN 中选出两个进行 xor(异或)运算,得到的结果最大是多少?

2201_75526359的博客 305

01字典树专题 (解决异或最大值问题)不断更新ing~

以前一直以为字典树没有多少用,但是最近一直碰到(难道是以前刷题太少的原因么),其中有一类问题叫做01字典树问题,它是用来解决xor的有力武器,通常是给你一个数组,问你一段连续的异或和最大是多少,正常思路贪心dp啥的都会一头雾水,但是用01字典树就能很快的解决,实现起来也十分方便。 贴一个01字典树的普遍模版 #define Memset(x, a) memset(x, a, sizeof(

魔笛手的博客 4345

Chip Factory (01字典树+删除操作)

Chip Factory(HDU 5536)和Xor sum(HDU 4825)一样都是01字典树,不过多了一个删除操作,HDU4825只有插入操作,而HDU 5536有删除操作 这里讲解一下删除操作: 定义一个judge[]数组判断每一个节点是否存在即可 在插入的时候令judeg[root]+=1 删除的时候令judge[root]-=1即可 当judge[root]<=0时以该roo...

yangzijiangac的博客 611

01字典树模板(带删除)

hdu4825 #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef long long LL; typedef pair<int, int> P; typedef pair<P, ll> LP; const ll inf = 1e9 + 100; const in...

- 回忆゛ 442

HDU 5536 Chip Factory 带删除的01字典树

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5536思路暴力查询#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<vector> #include<string> #include<queue> #include<stack> #incl

chen_minghui的博客 336

01字典树贪心查询+建立+删除(个人模版)

01字典树贪心查询+建立+删除: 1 #define maxn 2 2 typedef struct tree 3 { 4 tree *nex[maxn]; 5 int v; 6 int val; 7 }tree; 8 tree root; 9 void init() 10 { 11 for(int i=0;i&lt;ma...

weixin_33888907的博客 234

hdu5536 Chip Factory (01字典树删除操作)

Problem Description John is a manager of a CPU chip factory, the factory produces lots of chips everyday. To manage large amounts of products, every processor has a serial number. More specifically, t

退役的铜牌狗 773
上一篇: Java实验之货物进销管理系统
下一篇: ACM及OI大佬的博客(待补充)
sortmin
博客等级 码龄9年 45粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值