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

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. hadoop2.x大数据视频教程(十二天学会)

  2. Matlab 信号与系统课设 - BiRadio仿真电台

    BiRadio Matlab 信号与系统课设 - BiRadio仿真电台 Author : Benjamin142857 Date : 2018-12 Video : BiliBili Github ...

  3. Bootstrap 遮罩插件jquery.mloading

    使用方法 将jquery.mloading.js和jquery.mloading.css引入到页面,调用: $(element).mLoading({ text:"",//加载文字 ...

  4. 如何删除mysql注释

    Linux命令删除注释 先把库表导出成一个.sql文件,然后使用sed命令删除注释.此种适用于mysql端口不开外网的情况. $ cat create_table.sql create table t ...

  5. Mock、Powermock使用汇总

    背景 工作中经常用到单测,某对单测掌握的不好,所以趁此学习.总结一下. 主要参考:https://www.jianshu.com/p/0c2480b1709e.https://www.cnblogs. ...

  6. 1+X证书学习日志——javascript基础

    js javascript js的组成: ECMAscript DOM BOM js放置的位置 <script></script> <script src="路 ...

  7. js动态替换和插入字符串

    替换 str是我要查询的内容loot.SERVE.file 是要被替换的内容g 全局替换"" 去替换的内容,我这里是空str.replace(new RegExp(loot.SER ...

  8. Oracle大表改为分区表及表空间切换方案

    Oracle大表改为分区表及表空间切换方案 一.            背景 由于之前数据库表和索引放在一个表空间导致表空间数据文件增长太快,文件数量即将达到Oracle表空间的限制,需要对表(没有分 ...

  9. JAVA导出excel 直接弹出下载框

    转自:https://blog.csdn.net/qq_38423105/article/details/80782283 效果展示: 1.首先准备jar包 <dependency>    ...

  10. jsonpath 一个简单实用的工具

    import jsonpath import json data = "{\"a\": \"11\", \"c\": {\&quo ...