Minimum Xor Pair Query

题目大意

维护一个序列,支持动态插入,删除,查询最小异或对。

思路分析

看到查询最小异或对首先想到 01Trie,但 01Trie 不支持删除,考虑暴力套一个线段树分治。

需要预处理出每个元素的存活区间,这里使用了 map<int,vector<int>>。注意,有的元素会存活到最后,需要特判。

时间复杂度为 \(O(n\log n\log V)\),其中 \(V\) 是值域。

这个做法有较强的可扩展性,非常无脑。

代码

代码非常好写,只有 2k。

#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <map> using namespace std;
const int N=300300,M=10001000;
#define inf 2147483647 int n,op,in1;
int ans[N],type[N]; map<int,vector<int>> mp;//用于预处理元素存活区间 struct Trie{//递归版 Trie
#define c (x>>bit&1)
int a[M][2],num[M];
int tot;
void insert(int p,int bit,int x){
if(!~bit) return ;
if(!a[p][c]) a[p][c]=++tot;
insert(p=a[p][c],bit-1,x);
num[p]++;
}
void del(int p,int bit,int x){
if(!~bit) return ;
del(p=a[p][c],bit-1,x);
num[p]--;
}
int query(int p,int bit,int x){
if(!~bit) return 0;
bool f=!num[a[p][c]];
return query(a[p][c^f],bit-1,x)+f*(1<<bit);
}
}trie; struct ST{//线段树
#define mid ((l+r)>>1)
vector<int> a[N<<2];
void add(int p,int l,int r,int x,int y,int k){//增加元素
if(x<=l&&r<=y){a[p].push_back(k);return ;}
if(x<=mid) add(p<<1,l,mid,x,y,k);
if(y>mid) add(p<<1|1,mid+1,r,x,y,k);
}
void dfs(int p,int l,int r,int res){//遍历全树
for(auto it:a[p]){
res=min(res,trie.query(0,30,it));
trie.insert(0,30,it);
}
if(l==r) ans[l]=res;
else{
dfs(p<<1,l,mid,res);//答案下传
dfs(p<<1|1,mid+1,r,res);
}
for(auto it:a[p]) trie.del(0,30,it);
}
}tree; int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&op);
if(op==1){
scanf("%d",&in1);
mp[in1].push_back(i);
}
if(op==2){
scanf("%d",&in1);
tree.add(1,1,n,mp[in1].back(),i-1,in1);
mp[in1].pop_back();
}
if(op==3) type[i]=1;
}
for(auto it:mp)
for(auto it2:it.second)
tree.add(1,1,n,it2,n,it.first);//特判最后的元素
tree.dfs(1,1,n,inf);
for(int i=1;i<=n;i++)
if(type[i]) cout<<ans[i]<<'\n';
return 0;
}

[ABC308G] Minimum Xor Pair Query 题解的更多相关文章

  1. BZOJ2337:[HNOI2011]XOR和路径——题解

    +++++++++++++++++++++++++++++++++++++++++++ +本文作者:luyouqi233. + +欢迎访问我的博客:http://www.cnblogs.com/luy ...

  2. 【HDU5869】 Different GCD Subarray Query 题解 (线段树维护区间GCD)

    题目大意:求区间$[L,R]$中所有子区间产生的最大公因数的个数. ------------------------- 对于$gcd$,我们知道$gcd(a,b,c)=gcd(gcd(a,b),c)$ ...

  3. CodeForces 279D The Minimum Number of Variables 题解

    题目大意: 有一组n个不相同的数字组成数串:a1,a2,a3-an. 1.一个数组b. 2.第一个操作我们将b0的值赋为a1.之后我们有n-1个操作,第k次操作我们将by=bi+bj(y,i,j可能相 ...

  4. HDU 1385 Minimum Transport Cost 最短路径题解

    本题就是使用Floyd算法求全部路径的最短路径,并且须要保存路径,并且更进一步须要依照字典顺序输出结果. 还是有一定难度的. Floyd有一种非常巧妙的记录数据的方法,大多都是使用这种方法记录数据的. ...

  5. [HNOI2011]XOR和路径 题解

    设 \(f(x)\) 表示从 \(x\) 节点走到 \(n\) 的期望.有 $$f(x)=\sum_{{x,y}}\frac{f(y)\oplus w(x,y)}{{\rm deg}(x)}$$ 由于 ...

  6. USACO 6.1 Cow XOR

    Cow XORAdrian Vladu -- 2005 Farmer John is stuck with another problem while feeding his cows. All of ...

  7. GCD XOR(UVa 12716)

    题意:输入整数n(1<=n<=30000000),有多少对整数(a,b)满足1<=b<=a<=n,且gcd(a,b)=a xor b. 题解:设c=gcd(a,b),因为 ...

  8. BZOJ 2337 XOR和路径 | 高斯消元 期望 位运算

    BZOJ 2337 XOR和路径 题解 这道题和游走那道题很像,但又不是完全相同. 因为异或,所以我们考虑拆位,分别考虑每一位: 设x[u]是从点u出发.到达点n时这一位异或和是1的概率. 对于所有这 ...

  9. Minimum Window Substring leetcode java

    题目: Given a string S and a string T, find the minimum window in S which will contain all the charact ...

  10. 【leetcode刷题笔记】Minimum Window Substring

    Given a string S and a string T, find the minimum window in S which will contain all the characters ...

随机推荐

  1. WPF入门教程系列三十 ——DataGrid验证

    WPF入门教程系列目录 WPF入门教程系列二--Application介绍 WPF入门教程系列三--Application介绍(续) WPF入门教程系列四--Dispatcher介绍 WPF入门教程系 ...

  2. 【Linux】部署Nginx

    1.先安装gcc-c++编译器 yum install gcc-c++ yum install -y openssl openssl-devel 2.再安装pcre包 yum install -y p ...

  3. 行行AI人才直播第11期:墨尔本大学数据科学高级讲师-宫明明《机器学习:从统计到因果,人工智能的发展之路》

    行行AI人才是博客园和顺顺智慧共同运营的AI行业人才全生命周期服务平台. 马克斯·普朗克智能系统中心主任曾在国际数学家大会进行了题为 From Statistical to Causal Learni ...

  4. Java List集合根据某字段去重

    去重方法 单个字段为条件去重 /** * 单字段去重 * @param jackpotList1 新集合 * @param jackpotList 需要去重的集合 * @return */ priva ...

  5. Git:GitLab使用AD账户报错——remote: HTTP Basic: Access denied

    错误原因 当第一次使用AD账户进入GitLab时,需要进行密码重置,之后重新登录并进行克隆操作即可.

  6. C#.NET 国密SM4对称加解密 与JAVA互通 ver:20230731

    C#.NET 国密SM4对称加解密 与JAVA互通 ver:20230731 .NET 环境:.NET6 控制台程序(.net core). JAVA 环境:JAVA8,带maven 的JAVA控制台 ...

  7. SpringBoot3基础用法

    目录 一.背景 二.环境搭建 1.工程结构 2.框架依赖 3.环境配置 三.入门案例 1.测试接口 2.全局异常 3.日志打印 3.1 日志配置 3.2 日志打印 四.打包运行 五.参考源码 技术和工 ...

  8. Linux 身份验证被拒绝,登录失败解决

    解决方案: vim /etc/ssh/sshd_config 修改参数 基本参数: PermitRootLogin yes #允许root认证登录 PasswordAuthentication yes ...

  9. IDEA使用@Autowired注解为什么会提示不建议?

    ​在使用IDEA编写Spring相关的项目时,当在字段上使用@Autowired注解时,总会出现一个波浪线提示:"Field injection is not recommended.&qu ...

  10. Linux虚拟机报错Job for network.service failed because the control process exited with error codeLinux虚拟机报错的解决方法

    发布于 2 天前  3 次阅读 Linux虚拟机设置静态ip后,突然发现联网连不上了,ssh也无法使用,重启network后仍旧无法使用.按照网络上的方法发现没有效果后,右键如下位置将nat模式转换为 ...