和超级钢琴几乎是同一道题吧...

code:

#include <bits/stdc++.h>
#define N 200006
#define ll long long
#define setIO(s) freopen(s".in","r",stdin) , freopen(s".out","w",stdout)
using namespace std;
char buf[100000],*p1,*p2;
#define nc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++)
int rd()
{
int x=0; char s=nc();
while(s<'0') s=nc();
while(s>='0') x=(((x<<2)+x)<<1)+s-'0',s=nc();
return x;
}
namespace trie
{
int tot;
int cnt[N*30],ch[N*30][2];
int newnode() { return ++tot; }
void Insert(int pre,int &x,int v)
{
int now=x=newnode(),i;
for(i=30;i>=0;--i)
{
int o=((v>>i)&1);
ch[now][o^1]=ch[pre][o^1];
ch[now][o]=newnode();
pre=ch[pre][o];
now=ch[now][o];
cnt[now]=cnt[pre]+1;
}
}
int query(int x,int y,int z)
{
int re=0,i;
for(i=30;i>=0;--i)
{
int o=((z>>i)&1);
if(ch[x][o]<ch[y][o]) x=ch[x][o],y=ch[y][o];
else re+=(1<<i),x=ch[x][o^1],y=ch[y][o^1];
}
return re;
}
};
struct node
{
int o,l,r,val,pos;
node(int o=0,int l=0,int r=0,int val=0,int pos=0):o(o),l(l),r(r),val(val),pos(pos){}
bool operator<(node b) const
{
return b.val<val;
}
};
priority_queue<node>q;
int A[N],rt[N],ar[N],id[N];
set<int>S[N];
set<int>::iterator it;
int main()
{
// setIO("input");
int i,j,n,k,ou=0;
n=rd(),k=rd();
for(i=1;i<=n;++i)
{
A[i]=rd();
id[i]=ar[i]=A[i];
trie::Insert(rt[i-1],rt[i],A[i]);
}
sort(ar+1,ar+1+n);
for(i=1;i<=n;++i) id[i]=lower_bound(ar+1,ar+1+n,id[i])-ar;
for(i=1;i<=n;++i) S[id[i]].insert(i);
for(i=1;i<n;++i)
{
int l=i+1,r=n;
int tmp=trie::query(rt[l-1],rt[r],A[i]);
int idx=lower_bound(ar+1,ar+1+n,A[i]^tmp)-ar;
int pos=*S[idx].lower_bound(l);
q.push(node(i,l,r,tmp,pos));
}
while(ou<k)
{
node e=q.top(); q.pop();
printf("%d ",e.val),++ou;
int pos=e.pos;
if(pos!=e.l)
{
int tmp=trie::query(rt[e.l-1],rt[pos-1],A[e.o]);
int idx=lower_bound(ar+1,ar+1+n,A[e.o]^tmp)-ar;
int t=*S[idx].lower_bound(e.l);
q.push(node(e.o,e.l,pos-1,tmp,t));
}
if(pos!=e.r)
{
int tmp=trie::query(rt[pos],rt[e.r],A[e.o]);
int idx=lower_bound(ar+1,ar+1+n,A[e.o]^tmp)-ar;
int t=*S[idx].lower_bound(pos+1);
q.push(node(e.o,pos+1,e.r,tmp,t));
}
}
return 0;
}

  

BZOJ 3689: 异或之 可持久化trie+堆的更多相关文章

  1. BZOJ 3689 异或之 (可持久化01Trie+堆)

    题目大意:给你一个序列,求出第$K$大的两两异或值 先建出来可持久化$01Trie$ 用一个$set$/堆存结构体,存某个异或对$<i,j>$的第二关键字$j$,以及$ai\;xor\;a ...

  2. 洛谷.5283.[十二省联考2019]异或粽子(可持久化Trie 堆)

    LOJ 洛谷 考场上都拍上了,8:50才发现我读错了题=-= 两天都读错题...醉惹... \(Solution1\) 先求一遍前缀异或和. 假设左端点是\(i\),那么我们要在\([i,n]\)中找 ...

  3. BZOJ 5495: [2019省队联测]异或粽子 可持久化trie+堆

    和超级钢琴,异或之三倍经验 $?$ 堆+贪心素质三连 $?$ 好无聊...... code: #include <bits/stdc++.h> #define N 500006 #defi ...

  4. bzoj 4103: 异或运算 可持久化Trie

    题目大意: 给定长度为n的数列X={x1,x2,...,xn}和长度为m的数列Y={y1,y2,...,ym},令矩阵A中第i行第j列的值\(A_{ij} = x_i \text{ xor } y_j ...

  5. [十二省联考2019] 异或粽子 - 可持久化Trie,堆

    求 \(n\) 元数列的 \(k\) 个不同的子区间使得各个子区间异或和之和最大. Solution (差点又看错题了) 做个前缀和,于是转化成求序列异或和最大的 \(k\) 个数对 建一棵可持久化 ...

  6. BZOJ_3689_异或之_可持久化Trie+堆

    BZOJ_3689_异或之_可持久化Trie+堆 Description 给定n个非负整数A[1], A[2], ……, A[n]. 对于每对(i, j)满足1 <= i < j < ...

  7. BZOJ 3261: 最大异或和( 可持久化trie )

    搞成前缀和然后就可以很方便地用可持久化trie维护了.时间复杂度O((N+M)*25) -------------------------------------------------------- ...

  8. BZOJ 3261 最大异或和 可持久化Trie树

    题目大意:给定一个序列,提供下列操作: 1.在数组结尾插入一个数 2.给定l,r,x,求一个l<=p<=r,使x^a[p]^a[p+1]^...^a[n]最大 首先我们能够维护前缀和 然后 ...

  9. BZOJ 4103: [Thu Summer Camp 2015]异或运算 可持久化trie

    开始想了一个二分+可持久化trie验证,比正解多一个 log 仔细思考,你发现你可以直接按位枚举,然后在可持久化 trie 上二分就好了. code: #include <bits/stdc++ ...

随机推荐

  1. Kafka 消费者

    应用从Kafka中读取数据需要使用KafkaConsumer订阅主题,然后接收这些主题的消息.在我们深入这些API之前,先来看下几个比较重要的概念. Kafka消费者相关的概念 消费者与消费组 假设这 ...

  2. nodeJs编写的简单服务器

    一.简单的nodeJs写的 http 服务器 1.先Hello world,创建最简单的 Node 服务器(server.js) var http = require("http" ...

  3. mPass多租户系统微服务开发平台

    目录 项目总体架构图 基于SpringBoot2.x.SpringCloud并采用前后端分离的企业级微服务,多租户系统架构微服务开发平台 mPaaS(Microservice PaaS)为租户业务开发 ...

  4. C# vb .net实现圆角矩形特效滤镜

    在.net中,如何简单快捷地实现Photoshop滤镜组中的圆角矩形效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第 ...

  5. 2019 世纪龙java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.世纪龙等公司offer,岗位是Java后端开发,因为发展原因最终选择去了世纪龙,入职一年时间了,也成为了面试官 ...

  6. 微信小程序代码开源啦

    想学习如何使用mpvue开发微信小程序吗? 想知道微信消息推送如何实现吗? 想知道如何用springboot开发小程序后台吗? 看这里就全都有了.耗时一个月打造的微信小程序:PSN折扣助手前后端所有源 ...

  7. Android为TV端助力之弹出软键盘方式

  8. Python_类的私有属性、私有方法

    1.私有属性:只需要在初始化时,在属性名前加__ class Cup: #构造函数,初始化属性值 def __init__(self,capacity,color): #私有属性,只需要在属性名字前加 ...

  9. ansible中的常用循环模块with_items

    ansible中的循环模块有很多,不过with_items最为常用,且较为简单,循环模块最多的功能就是将重复性的任务简单化,如下例子所示: - hosts: all remote_user: root ...

  10. unicode转换为中文

    unicode转换为中文 \u5f53\u5730\u65f6\u95f42019\u5e747\u670813\u65e5\uff0c\u82f1\u56fd\u8d1d\u5fb7\u798f\u ...