这道题与2018年十二省联考中的异或粽子很相像,可以算作一个简易版;

因为这不需要可持久化;

也就是说求任意两个数异或起来的第k大值;

首先把所有数放进trie里。

然后二分答案,枚举每个数,相应地在trie上从高位开始跑,统计答案。

具体做法:当前跑到二进制第k位,已经确定了比k高的位的数字,使得每一位与当前枚举的数的异或等于mid的这一位。

如果mid第k位为0,那么这一位异或为1的一定对答案有贡献,把整个子树的答案加起来。然后继续做下一位。

时间复杂度O(nlog^2n)

#include <bits/stdc++.h>
using namespace std;
const int maxn=50005,maxm=200005,M=15;
typedef long long LL;
int n,a[maxn],l,r,mid;
LL m,ans,sum[maxm],t;
char c;
int read()
{
for (c=getchar();c<'0' || c>'9';c=getchar());
int x=c-48;
for (c=getchar();c>='0' && c<='9';c=getchar()) x=x*10+c-48;
return x;
}
void insert(int x,int num,int w)
{
sum[x]++;
if (w<0) return;
if ((num&(1<<w))==0) insert(x<<1,num,w-1);else insert(x<<1|1,num,w-1);
}
int query(int x,int num,int w,int now)
{
if (w<0) return sum[x];
int t=((num&(1<<w))>0);
if ((now&(1<<w))==0) return query(x<<1|t,num,w-1,now)+sum[x<<1|(t^1)];
return query(x<<1|(t^1),num,w-1,now);
}
bool check(int x)
{
if (!x) return 1;
ans=0;
for (int i=0;i<n;i++) ans+=query(1,a[i],M,x);
if (ans>=m) return 1;
return 0;
}
int main()
{
scanf("%d%lld",&n,&m);
for (int i=0;i<n;i++) insert(1,a[i]=read(),M);
for (l=0,r=(1<<(M+1))-1,mid=r>>1;l<r;mid=l+r>>1)
if (check(mid)) l=mid+1;else r=mid;
if (!check(l)) l--;
printf("%d\n",l);
fclose(stdin); fclose(stdout);
return 0;
}

最新文章

  1. 借助 Lucene.Net 构建站内搜索引擎(下)
  2. Simple Network Management Protocol - SNMP Tutorial
  3. 求子串-KPM模式匹配-NFA/DFA
  4. CLR via C#(13)-浅谈事件
  5. 《Java虚拟机并发编程》学习笔记
  6. zz 游戏程序员的学习之路(中文版)
  7. Qt操作xml文件(增删改功能)
  8. [SAP ABAP开发技术总结]BAPI调用
  9. IC封装图片认识(一):BGA
  10. Hadoop获得先进的步步高(四)-试Hadoop
  11. oracle 非数字型转数字型
  12. hibernate事务控制
  13. 基于Apache搭建Nagios图形监控
  14. mysql:Linux系统下mysql5.6的安装卸载
  15. Unity UGUI图文混排(五) -- 一张图集对应多个Text
  16. 常见的页面中两个div自适应等高CSS控制
  17. 一招让 IOS 自动化化快的飞起
  18. shelve 模块
  19. 微信小程序转发功能
  20. ABAP 面向对象事件处理

热门文章

  1. 阿里云Ubuntu安装LNMP环境之PHP7
  2. C# Unicode编码解码
  3. MySQL认识索引
  4. 点击事件解绑unbind
  5. node.js由浅入深教程
  6. 在linux上使用impdp命令时提示ORA-12154: TNS:could not resolve the connect identifier specified的问题
  7. laravel-5.3(1) 路由配置
  8. 11 MySQL之性能优化
  9. 转 CentOS7使用firewalld打开关闭防火墙与端口
  10. 小D课堂 - 新版本微服务springcloud+Docker教程_6-03 高级篇幅之zuul常用问题分析