bzoj3689
这题做法很多
可以通过类似noi超级钢琴那道题目的做法用可持久化+trie来做
还可以直接在trie树上维护size域然后类似查找k大的做法做
总之还是比较水的
type node=record
kth,num,ans:longint;
end; var heap:array[..] of node;
son:array[..,..] of longint;
size:array[..] of longint;
a:array[..] of longint;
t,i,n,m:longint; procedure swap(var a,b:node);
var c:node;
begin
c:=a;
a:=b;
b:=c;
end; procedure add(x:longint);
var i,p,y:longint;
begin
p:=;
for i:= downto do
begin
y:=x and ( shl i);
if y> then y:=;
if son[p,y]= then
begin
inc(t);
son[p,y]:=t;
end;
p:=son[p,y];
inc(size[p]);
end;
end; function ask(x,k:longint):longint;
var p,i,y:longint;
begin
p:=;
ask:=;
for i:= downto do
begin
y:=x and ( shl i);
if y> then y:=;
if size[son[p,y]]>=k then p:=son[p,y]
else begin
ask:=ask+ shl i;
k:=k-size[son[p,y]];
p:=son[p,-y];
end;
end;
end; procedure sift(i:longint);
var j:longint;
begin
j:=i shl ;
while j<=t do
begin
if (j+<=t) and (heap[j].ans>heap[j+].ans) then inc(j);
if heap[i].ans>heap[j].ans then
begin
swap(heap[i],heap[j]);
i:=j;
j:=i shl ;
end
else break;
end;
end; begin
readln(n,m);
t:=;
for i:= to n do
begin
readln(a[i]);
add(a[i]);
end;
for i:= to n do
begin
heap[i].num:=a[i];
heap[i].kth:=;
heap[i].ans:=ask(a[i],);
end;
t:=n;
for i:=n div downto do
sift(i);
for i:= to *m do
begin
if i mod = then write(heap[].ans,' '); //注意会被重复计算
if heap[].kth=n then
begin
swap(heap[],heap[t]);
dec(t);
end
else begin
inc(heap[].kth);
heap[].ans:=ask(heap[].num,heap[].kth);
end;
sift();
end;
end.
bzoj3689的更多相关文章
- 【BZOJ3689】异或之 堆+可持久化Trie树
[BZOJ3689]异或之 Description 给定n个非负整数A[1], A[2], ……, A[n].对于每对(i, j)满足1 <= i < j <= n,得到一个新的数A ...
- BZOJ3689 异或之
我们需要知道一个事实,trie树上是可以要求第k大的! 我们每个节点记个size值然后像其他数据结构一样维护就可以了 然后我们再搞个priority_queue什么的就好了,注意每个值会出现两次只要记 ...
- 【bzoj3689】异或之 可持久化Trie树+堆
题目描述 给定n个非负整数A[1], A[2], ……, A[n].对于每对(i, j)满足1 <= i < j <= n,得到一个新的数A[i] xor A[j],这样共有n*(n ...
- bzoj2006 [NOI2010]超级钢琴 (及其拓展)
bzoj2006 [NOI2010]超级钢琴 给定一个序列,求长度在 \([L,\ R]\) 之间的区间和的前 \(k\) 大之和 \(n\leq5\times10^5,\ k\leq2\times1 ...
- HBSX2019 游记
Day -4 训练戳SX2019 3月训练 ZJOI2019 Day1几天前就考了 T1真考了麻将QwQ 九条可怜的毒瘤真的是业界良心 今天中午才起,要开始调整生物钟了 9012HBOIers群里讨论 ...
- [您有新的未分配科技点]可,可,可持久化!?------0-1Trie和可持久化Trie普及版讲解
这一次,我们来了解普通Trie树的变种:0-1Trie以及在其基础上产生的可持久化Trie(其实,普通的Trie也可以可持久化,只是不太常见) 先简单介绍一下0-1Trie:一个0-1Trie节点只有 ...
随机推荐
- Java-struts2 配置hellow world
这里进行struts框架的配置问题,和简单的输出hellow world 配置的步骤 1. 配置TomCat 2. Jak 3. 拷贝struts.xml文件到src目录 ...
- 'EntityValidationErrors' property for more details
很多小猿遇到这个Exception 的时候,都会有点无厘头.这个时候最好try-- catch下,找到出错的地方.本人习惯在页面上加个lable标签,把exc msg(exception messag ...
- How to hanganalyze and systemstate dumps
Oracle support request hang analysis and system state dumps when rasing SR. One 10.1 or higher versi ...
- 查看oracle 启动了多久
想看一下系统正常运行了多少天?开机多长时间没有重启了? windows系统 C:\>systeminfo |find “系统启动时间”系统启动时间: 265 天 4 小时 26 分 32 ...
- Java的split方法说明
相信大家都经常使用String 的split方法,但是大家有没有遇到下面的这种情况: 大家想想下面的代码执行结果是什么 public static void main(String[] args) { ...
- MySQL 连接数据库
一.MySQL 连接本地数据库,用户名为“root”,密码“123”(注意:“-p”和“123” 之间不能有空格),缺点:密码显示在显示器上,容易泄露. C:\>mysql -h localho ...
- CSS3 文本装饰
浏览器对CSS3文本特性的支持情况,如下表所示: 浏览器 text-shadow text-overflow word-wrap hyphens Opera 9.5+ 9+.带前缀-o- 10.5+ ...
- 让QMainWindow也表现出QDialog的exec函数的特征
前几天在做毕业设计项目的时候,使用的PyQt4,想实现这么样一个功能: 场景描述:主窗口a(QMainWindow类型)和主窗口b(QMainWindow),b是通过a窗口中某一个按钮弹出来的. 功能 ...
- new Image()的用途
new Image()用途总结: 1.图片预加载 在做游戏时,为了使图片能快打开可以做预加载. 原理:创建image对象,将image对象的src分别指向需加载的图片地址,图片被请 ...
- IS脚本学习
OnFirstUIBefore:函数块用于第一安装应用时安装部件前所要完成的任务.一般在这里进行下列设: 1. 设置屏蔽 2. 显示欢迎信息,软件协议书或关于软件安装的其他说明信息 3. 从用户处获取 ...