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. 一文解开主流开源变更数据捕获技术之Flink CDC的入门使用

    @ 目录 概述 定义 什么是CDC? CDC的分类 特性 应用场景 支持数据源 实战 Flink DataStream方式代码示例 FlinkSQL方式代码示例 概述 定义 flink-cdc-con ...

  2. SpringBoot定义优雅全局统一Restful API 响应框架完结撒花篇封装starter组件

    之前我们已经,出了一些列文章. 讲解如何封统一全局响应Restful API. 感兴趣的可以看我前面几篇文章 (整个starter项目发展史) SpringBoot定义优雅全局统一Restful AP ...

  3. 360OS张焰:AI视觉在教育中的应用

    11月24日,由即构科技主办的2020GET大会教育科技分论坛在北京成功召开,来自叮咚课堂.小冰.360OS.蕃茄田艺术.即构科技的6位资深教育/科技大咖,在论坛上进行深度分享. 以下为360OSAI ...

  4. win10使用Docker Desktop启动mysql报错:Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:3306 -> 0.0.0.0:0: listen tcp 0.0.0.0:3306:

    问题描述 今天上班用wind10电脑启动Docker Desktop使用MySQL,突然间报了一个错,错误如下: Error response from daemon: Ports are not a ...

  5. Lazy(Func<T>)的异常缓存问题

    Lazy可以提供多线程环境下的安全保障,但是用不好也是会跳到坑里. 我这里使用Lazy<t>(Func<T>)来创建一个Lazy实例,然后在需要的地方访问它的Value属性,它 ...

  6. 通配符SSL证书自动续签自动部署方案

    最开始接触 https 的时候一直是使用的 阿里云和腾讯云的免费 SSL证书,免费的SSL证书用了几年后,慢慢的部署https证书的项目越来越多,时间久了发现每个网站都需要一个 SSL证书,每个SSL ...

  7. 关于在modelsim中 仿真 ROM IP核 读取不了 mif文件 的解决方法

    在modelsim中 仿真 ROM IP核 读取不了 mif文件 . 出现状况: 显示无法打开 rom_8x256.mif 文件 .点开modelsim下面文件的内存列表,可看到内存全为0. 查看自身 ...

  8. 一起来自定义loader吧

    loader 在 webpack 编译中起到非常重要的作用,用于对模块的源代码进行转换,比如 css-loader 将 css 代码处理成字符串,style-loader 创建 style 标签将 c ...

  9. Azure Terraform(十四)Azure Key Vault 的机密管理

    一,引言 最近有网友私信我,将 Terraform 部署到 Azure 是一种将基础结构作为代码进行管理的好方法,但是如何使用 Azure Key Vault 来存储我们的 Secret ?在这篇博文 ...

  10. proxysql修改默认系统配置

    前言 proxysql在第一次启动后,配置就从sqlite db中加载了,而不是配置文件. 有时候我们需要修改proxysql的默认配置,其相关配置在main.global_variables表中,可 ...