题目大意:给你n个数,两两互相异或出n∗(n−1)/2n*(n-1)/2n∗(n−1)/2个数,求前k小的数


第一次知道trie树可以查询异或值得第k小
解题思路有点像这道题:题目门

我们可以用优先队列维护每次先整出每个数异或的第二小值,[因为第一小是自己异或自己],再继续把第二小踢出堆,将这个元素的rk++再回到trie数里面查询第三小的类推下去直到找到第k个


#include <iostream>
#include <cstdio>
#include <stack>
#include <sstream>
#include <limits.h>
#include <vector>
#include <map>
#include <cstring>
#include <deque>
#include <cmath>
#include <iomanip>
#include <queue>
#include <algorithm>
#include <set>
#define Mid ((l + r) >> 1)
#define Lson rt << 1, l , mid
#define Rson rt << 1|1, mid + 1, r
#define ms(a,al) memset(a,al,sizeof(a))
#define log2(a) log(a)/log(2)
#define _for(i,a,b) for( int i = (a); i < (b); ++i)
#define _rep(i,a,b) for( int i = (a); i <= (b); ++i)
#define for_(i,a,b) for( int i = (a); i >= (b); -- i)
#define rep_(i,a,b) for( int i = (a); i > (b); -- i)
#define lowbit(x) ((-x) & x)
#define IOS std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define INF 0x3f3f3f3f
#define LLF 0x3f3f3f3f3f3f3f3f
#define hash Hash
#define next Next
#define pb push_back
#define f first
#define s second
using namespace std;
const int N = 1e5 + 10, MOD = 998244353;
const long double eps = 1e-5;
const int p = 2333;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef pair<ll,ll> PLL;
typedef pair<double,double> PDD;
template<typename T> void read(T &x)
{x = 0;char ch = getchar();ll f = 1;while(!isdigit(ch)){if(ch == '-')f*=-1;ch=getchar();}while(isdigit(ch)){x = x*10+ch-48;ch=getchar();}x*=f;
}
template<typename T, typename... Args> void read(T &first, Args& ... args)
{read(first);read(args...);
}
int tr[N * 40][2], siz[N * 40];
int idx;
int a[N];
struct node {int x, ans, id;bool operator < (node a) const {return x > a.x;}
};priority_queue<node> heap;void insert(int x)
{int rt = 0;for(int i = 30; i >= 0; -- i){int ch = (x >> i & 1);if(!tr[rt][ch]) tr[rt][ch] = ++ idx;rt = tr[rt][ch];siz[rt] ++;}
}int ask(int x, int k)
{int rt = 0, res = 0;for(int i = 30; i >= 0; -- i){int ch = x >> i & 1;if(siz[tr[rt][ch]] >= k) rt = tr[rt][ch];else k -= siz[tr[rt][ch]], res += 1 << i, rt = tr[rt][ch ^ 1];}return res;
}
int n, m;
int main()
{read(n,m);for(int i = 1; i <= n; ++ i){read(a[i]);insert(a[i]);}for(int i= 1; i <= n; ++ i){node x;x.x = ask(a[i],2);x.id = 2;x.ans = a[i];heap.push(x);}for(int i = 1; i <= m * 2; ++ i){node x = heap.top();heap.pop();if(i & 1) cout << x.x << " ";if(x.id == n) continue;//rk到n了就不行了最多是n对于一个数x.id ++, x.x = ask(x.ans,x.id);heap.push(x);}return 0;
}

bzoj异或之[查询异或和的第k小]相关推荐

  1. 【HDU3949 + BZOJ2115 + CF724G】【异或线性基例题】| 倍增 | 第k小异或和 | DFS处理环 |【CGWR】| N

    三道关于异或线性基的有趣的题目 [1] HDU 3949. XOR Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/3276 ...

  2. hdu3949(线性基,求第k小的异或和

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3949 XOR Time Limit: 2000/1000 MS (Java/Others)    Me ...

  3. [高通SDM450][Android9.0]双屏异显、双屏异触

    文章目录 开发平台基本信息 问题描述 解决方法 双屏异显 双屏异触 延伸扩展 开发平台基本信息 芯片: SDM450 版本: Android 9.0 kernel: msm-4.9 问题描述 公司有一 ...

  4. 什么是异或_异或运算及异或运算的作用

    什么是异或_异或运算及异或运算的作用 异或,是一个数学运算符,英文为exclusive OR,缩写为xor,应用于逻辑运算. 异或的数学符号为"⊕",计算机符号为"xor ...

  5. 【BZOJ】1901: Zju2112 Dynamic Rankings(区间第k小+树状数组套主席树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1901 首先还是吐槽时间,我在zoj交无限tle啊!!!!!!!!我一直以为是程序错了啊啊啊啊啊啊. ...

  6. 小程序源码:游戏助手王者战力查询扫码登录多功能微信小程序

    这是一款游戏多功能助手小程序 内由王者战力查询(支持微信QQ双端查询,安卓IOS) 游戏扫码登录(内支持多种游戏扫码登录) 短视频去水印功能(支持各大平台) 游戏改名助手(支持空白名生成,符号名生成) ...

  7. trie树上值域化建主席树 查询异或平移最小值 ---- P3293 [SCOI2016]美味

    题目大意: 解题思路: 首先我们知道区间查询异或最小值肯定是在trie是匹配 而且如果没有(aj+xi)(aj+xi)(aj+xi)就是一个可持久化Trie树上面的裸题了 但是很不幸有 怎么办呢? 首 ...

  8. bzoj 4561: [JLoi2016]圆的异或并(扫描线+set)

    4561: [JLoi2016]圆的异或并 Time Limit: 30 Sec  Memory Limit: 256 MB Submit: 715  Solved: 277 [Submit][Sta ...

  9. 安卓系统双屏异显_Android 双屏异显实现的三种方式

    在各种产品脑洞大开的时代,需求也是日益新异,笔者最近开发了一套双屏异显app.现在做一些总结 1.双屏异显第一种实现方式(官方提供的Presentation) Android 提供了一个叫 Prese ...

最新文章

  1. 2021年大数据Flink(三十二):​​​​​​​Table与SQL案例准备 API
  2. python计算四元素组合算法_python – 算法,列表元素之间的最近点
  3. oracle如何给表上锁,【ORACLE】Oracle中发生表加锁、死锁的原因,查看,与解决方法...
  4. vue案例-计数器.html
  5. 实验八 《Coderxiaoban团队》团队作业4:基于原型的团队项目需求调研与分析
  6. informix clob转oracle 乱码_Oracle 视图-序列-权限-表-事务
  7. 使用码云git的webhook实现生产环境代码的自动pull
  8. Sentinel 源码分析(一)
  9. 【WebRTC---入门篇】(二)WebRTC的目录结构
  10. 今天开始学C#.NET
  11. java中sofa并发访问,云上的日子:用块存储、文件存储还是对象存储?
  12. java程序可分为两个基本文件_1 Java语言概述答案
  13. python opencv3 检测人
  14. 开发跨平台app推荐React Native还是flutter?
  15. 本地时间转utc时间_有关机器时间、UTC时间、本地时间的总结
  16. matlab2014启动很慢,matlab启动慢的解决方法
  17. mysql限制用户只能访问指定数据库
  18. 十三、mysql 分区之 RANGE LIST
  19. 【LeetCode】整数反转【不能借助辅助空间,需要处理溢出】
  20. SpringBoot2 Spring Cloud Config Server和Config Client分布式配置中心使用教程

热门文章

  1. python记录当前系统时间 生成照片直接命名
  2. 风云榜查询名次 接单者与公司对应的数据库语句
  3. 简洁版本 STP/RSTP/MSTP的区别以及各自的特点
  4. 爬虫-selenium初步学习与使用!
  5. 基于Python利用OpenCV实现Hough变换的形状检测
  6. 复杂场景下的复杂缺陷检测方法--深度学习算法综述
  7. 机器人如何在不断变化的世界中“找到”自己?
  8. 43.6% mAP! 阿里巴巴提出:用于一阶段目标检测的半锚式检测器
  9. 【OpenCV 4开发详解】颜色模型与转换
  10. 栈与队列8——求最大子矩阵的大小