[ABC308G] 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 题解的更多相关文章
- BZOJ2337:[HNOI2011]XOR和路径——题解
+++++++++++++++++++++++++++++++++++++++++++ +本文作者:luyouqi233. + +欢迎访问我的博客:http://www.cnblogs.com/luy ...
- 【HDU5869】 Different GCD Subarray Query 题解 (线段树维护区间GCD)
题目大意:求区间$[L,R]$中所有子区间产生的最大公因数的个数. ------------------------- 对于$gcd$,我们知道$gcd(a,b,c)=gcd(gcd(a,b),c)$ ...
- 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可能相 ...
- HDU 1385 Minimum Transport Cost 最短路径题解
本题就是使用Floyd算法求全部路径的最短路径,并且须要保存路径,并且更进一步须要依照字典顺序输出结果. 还是有一定难度的. Floyd有一种非常巧妙的记录数据的方法,大多都是使用这种方法记录数据的. ...
- [HNOI2011]XOR和路径 题解
设 \(f(x)\) 表示从 \(x\) 节点走到 \(n\) 的期望.有 $$f(x)=\sum_{{x,y}}\frac{f(y)\oplus w(x,y)}{{\rm deg}(x)}$$ 由于 ...
- USACO 6.1 Cow XOR
Cow XORAdrian Vladu -- 2005 Farmer John is stuck with another problem while feeding his cows. All of ...
- GCD XOR(UVa 12716)
题意:输入整数n(1<=n<=30000000),有多少对整数(a,b)满足1<=b<=a<=n,且gcd(a,b)=a xor b. 题解:设c=gcd(a,b),因为 ...
- BZOJ 2337 XOR和路径 | 高斯消元 期望 位运算
BZOJ 2337 XOR和路径 题解 这道题和游走那道题很像,但又不是完全相同. 因为异或,所以我们考虑拆位,分别考虑每一位: 设x[u]是从点u出发.到达点n时这一位异或和是1的概率. 对于所有这 ...
- 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 ...
- 【leetcode刷题笔记】Minimum Window Substring
Given a string S and a string T, find the minimum window in S which will contain all the characters ...
随机推荐
- APP中Web容器的核心实现
现在的业务型APP中,采用纯原生开发策略的已经很少了,大部分都使用的混合开发.如原生,H5,ReactNative,Flutter,Weex它们之间任意的组合就构成了混合开发. 其中原生+H5是出 ...
- Hello-FPGA CoaXPress 2.0 FPGA HOST IP Core Demo User Manual
目录 Hello-FPGA CoaXPress 2.0 Host FPGA IP Core Demo 4 1 说明 4 2 设备连接 5 3 VIVADO FPGA工程 6 4 SDK工程 9 图 1 ...
- zip文件结构
转starshine博客 一个zip文件由三个部分组成:压缩源文件数据区.压缩源文件目录区.压缩源文件目录结束标志 压缩源文件数据区: 50 4B 03 04:这是头文件标记(0x04034b50) ...
- 2023-07-16:讲一讲Kafka与RocketMQ中零拷贝技术的运用?
2023-07-16:讲一讲Kafka与RocketMQ中零拷贝技术的运用? 答案2023-07-16: 什么是零拷贝? 零拷贝(英语: Zero-copy) 技术是指计算机执行操作时,CPU不需要先 ...
- iptables防火墙调试,想打印个日志就这么难
背景 怎么会讲这个话题,这个说来真的长了.但是,长话短说,也是可以的. 我前面的文章提到,线上的服务用了c3p0数据库连接池,会偶发连接泄露问题,而分析到最后,又怀疑是db侧主动关闭连接,或者是服务所 ...
- Android Studio开发小项目
"莆仙小馆"--莆田文化展示APP 文化展示程序目的在于应用科学技术助推家乡优秀传统文化的展示与交流.通过图片.视频.音频等展示方式向用户立体地展示一个文化城邦.传统文化与科学技术 ...
- 青少年CTF平台-Web-Flag在哪里
平台名称:青少年CTF训练平台 题目名称:Flag在哪里? 解题过程: 启动环境,需要等待大概20秒左右的时间. 访问,页面显示Flag反正不在这. 右键网页,发现无法使用右键. 那么我们直接F12 ...
- 青少年CTF平台 Web签到
题目说明 Web一星简单题,Web签到. 直接启动环境,等待30秒左右访问题目链接. 做题过程 进入后,题目好像没有告诉我们什么有用的信息, F12,看遍了题目源码,也没有发现flag,正当我怀疑这个 ...
- 查看Linux系统下CPU、内存、硬盘等信息
做个记录,方便日后查看使用. 1. 查看CPU 1.1 查看CPU个数 [root@qy-ggyf-zyl-31 ~]# cat /proc/cpuinfo | grep "physical ...
- 【Unity3D】平面光罩特效
1 前言 屏幕深度和法线纹理简介中对深度和法线纹理的来源.使用及推导过程进行了讲解,激光雷达特效中讲述了一种重构屏幕像素点世界坐标的方法,本文将沿用激光雷达特效中重构像素点世界坐标的方法,实现平面 ...