首页 > 其他分享 >CF818E - Choosing The Commander

CF818E - Choosing The Commander

时间:2023-02-24 17:12:29浏览次数:36  
标签:cyr cnt int res Commander trie CF818E Choosing 取值

题意:每次插入/删除一个数,或询问当前所有数中异或上 \(p\) 之后小于 \(l\) 的有多少个。

看到动态最小化异或值的,我们首先想到 \(\text{Trie}\),我们先建立一棵 \(\text{Trie}\),在每个节点上保存当前节点子树的个数总和,就可以方便的 \(O(\log a)\) 插入或者删除。

然后考虑查询。我们发现,我们在递归到第 \(i\) 位时,如果 \(a_i\oplus p_i>l_i\),那么无论下面怎么走都不会到达结果。\(a_i\oplus p_i<l_i\) 时,此节点下方的所有值都满足要求。只有在 \(a_i\oplus p_i= l_i\) 时,我们需要继续前往当前节点的 \(a_i\) 节点确定答案。

而现在 \(l_i\) 的取值只有 \(0\) 和 \(1\) 两种,就可以直接分类讨论。

  • \(l_i=0\),那么取值为 \(p_i\) 的儿子会变成 \(0\),往下递归;取值为 \(\sim p_i\) 的儿子会变成 \(1\),直接干掉

  • \(l_i=1\),取值为 \(p_i\) 的儿子变成 \(0\),直接加上答案;取值为 \(\sim p_i\) 的儿子会变成 \(1\),往下递归

注意因为我们需要的是严格小于,所以不应当计算最终叶子节点的数

int n,t,x,y,trie[3000005][2],m,cnt[3000005];
inline void add(int x){
	int cyr=0;
	per(i,0,30){
		int p=(x>>i&1);
		if(!trie[cyr][p])trie[cyr][p]=++m;
		cyr=trie[cyr][p],cnt[cyr]++;
	}
}
inline void ers(int x){
	int cyr=0;
	per(i,0,30){
		int p=(x>>i&1);
		cyr=trie[cyr][p],cnt[cyr]--;
	}
}
inline int qry(int p,int l){
	int cyr=0,res=0;
	per(i,0,30){
		if(l>>i&1){
			res+=cnt[trie[cyr][(p>>i&1)]];
			if(!trie[cyr][!(p>>i&1)])return res;
			cyr=trie[cyr][!(p>>i&1)];
		}else{
			if(!trie[cyr][p>>i&1])return res;
			cyr=trie[cyr][p>>i&1];
		}
	}return res;
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin>>n;
	rp(i,n){
		cin>>t>>x;
		if(t==1){
			add(x);
		}else if(t==2)ers(x);
		else {
			cin>>y;
			cout<<qry(x,y)<<'\n';
		}
	}
	return 0;
}
//Crayan_r

标签:cyr,cnt,int,res,Commander,trie,CF818E,Choosing,取值
From: https://www.cnblogs.com/jucason-xu/p/17152196.html

相关文章

  • 按快捷键 ` 显示或者隐藏 Total Commander 10.52 主窗口 2023-2-5 (快捷键 ` 即波浪
      按快捷键`显示或者隐藏TotalCommander10.52主窗口2023-2-5    (快捷键`即波浪键~,位于Esc键正下方,位于Tab键正上方)  https://ds920.lanzoum.......
  • 树形DP (cf 219D Choosing Capital for Treeland)
    题意翻译题目描述Treeland国有n个城市,这n个城市连成了一颗树,有n-1条道路连接了所有城市。每条道路只能单向通行。现在政府需要决定选择哪个城市为首都。假如城市i成为了首都......
  • GL-Choosing a bank 20221125
    Time2022.11.25FridayChoosingabankwhat'smoreimportanttoyou:'overdraftprotection'or'highinterestrates'?Investigatetheservicesofanewbang......
  • CF817E Choosing The Commander Sol
    首先,对于\(1,2\)操作显然可以对于当前Trie上的编号开一个数组记录出现次数。考虑\(3\)操作。可以树上前缀和在\(1,2\)操作的时候把根节点到当前编号路径上全体\(......
  • 【Jlink】J-Link Commander 命令行脚本使用例子 下载烧录 芯片解锁 芯片加锁
    下载烧录:创建download.bat,将下面内容放入,并根据实际情况填写JLink.exe路径、设备名称setPATH=D:/Keil_v5/Arm/Segger/;JLink.exe-autoconnect1-deviceCX32L003-ifsw......
  • 用commander.js构建自己的脚手架工具
    随着前端技术的发展,工程化逐渐成为了一种趋势。但在实际开发时,搭建项目是一件很繁琐的事情,尤其是在对一个框架的用法还不熟悉的时候。于是很多框架都自带一套脚手架工具,在初......
  • Total Commander 使用 mklink 建立文件夹链接 将 C 盘文件迁移到其他盘
    在安装完成了100000000个软件之后,我1T的C盘的空间终于不足了,由于安装了大量的特别挑的不专业的软件,强行放在其他的盘将水土不服。于是在老师傅的指导下,我采用了mkli......
  • CF643G Choosing Ads
    传送门思路先考虑一下\(p>50\)的情况这时候就是求“绝对众数”一个方法就是用“摩尔投票”法方法就是:每次将不同的两个数去掉,剩下的那种数就是绝对众数(这是保证......
  • cf321 C. Ciel the Commander
    题意:用'A'~'Z'​给一棵树上的点染色,要求若两点字符相同则两点间的路径上一定有字符更小的点。思路:法一:点分治树的重心能把树划分成每块大小不超过\(n/2\)的连通块......
  • L6U6-Choosing a gym
    L6U6Choosingagym2022.08.14Sunday15:40-16:30thisclassstarted?==>Isthislessonstarted?Howmanygradesofyourcollege?Freshmansophomoreyearjun......