我们需要知道一个事实,trie树上是可以要求第k大的!

我们每个节点记个size值然后像其他数据结构一样维护就可以了

然后我们再搞个priority_queue什么的就好了,注意每个值会出现两次只要记一次

 /**************************************************************
     Problem: 3689
     User: rausen
     Language: C++
     Result: Accepted
     Time:4328 ms
     Memory:44524 kb
 ****************************************************************/

 #include <cstdio>
 #include <queue>

 using namespace std;
 ;
 ;

 struct trie_node {
     trie_node *son[];
     int sz;
 } *null, *trie_root, mempool[Tot_sz], *cnt_trie = mempool;

 struct data {
     int x, y, k;
     data() {}
     data(int _x, int _y, int _k) : x(_x), y(_y), k(_k) {}

     inline bool operator < (const data &a) const {
         return x == a.x ? (y == a.y ? k > a.k : y > a.y) : x > a.x;
     }
 };

 int n, m;
 int a[N];
 priority_queue <data> h;

 inline int read() {
     ;
     char ch = getchar();
     ' < ch)
         ch = getchar();
     ') {
         x = x *  + ch - ';
         ch = getchar();
     }
     return x;
 }

 #define Son p -> son
 #define Sz p -> sz
 inline void trie_null(trie_node *&p) {
     p = cnt_trie;
     Son[] = Son[] = p;
     Sz = ;
 }

 inline void trie_new(trie_node *&p) {
     p = ++cnt_trie, *p = *null;
 }

 inline void trie_insert(int x) {
     static trie_node *p;
     static int i, t;
     ; ~i; --i) {
         t = x >> i & ;
         if (Son[t] == null) trie_new(Son[t]);
         p = Son[t], ++Sz;
     }
 }

 inline int trie_query(int x, int rank) {
     static trie_node *p;
     static int i, t, res;
     , res = ; ~i; --i) {
         t = x >> i & ;
         if (rank <= Son[t] -> sz) p = Son[t];
         else {
             rank -= Son[t] -> sz;
             res |=  << i;
             p = Son[!t];
         }
     }
     return res;
 }
 #undef Son
 #undef Sz

 int main() {
     int i, x, y, k;
     n = read(), m = read();
     trie_null(null);
     trie_new(trie_root);
     ; i <= n; ++i) {
         a[i] = read();
         trie_insert(a[i]);
     }
     ; i <= n; ++i)
         h.push(data(trie_query(a[i], ), a[i], ));
     ; i <  * m; ++i) {
         x = h.top().x, y = h.top().y, k = h.top().k;
         ) {
             ) putchar(' ');
             printf("%d", x);
         }
         h.pop();
         h.push(data(trie_query(y, k + ), y, k + ));
     }
     ;
 }

(p.s. 注意会PE...然后改了一下输出边WA了QAQ...第三次才改对...)

BZOJ3689 异或之的更多相关文章

  1. Android数据加密之异或加密算法

    前言: 这几天被公司临时拉到去做Android IM即时通信协议实现,大致看了下他们定的协议,由于之前没有参与,据说因服务器性能限制,只达成非明文传递,具体原因我不太清楚,不过这里用的加密方式是采用异 ...

  2. Oracle数据库异机升级

    环境: A机:RHEL5.5 + Oracle 10.2.0.4 B机:RHEL5.5 需求: A机10.2.0.4数据库,在B机升级到11.2.0.4,应用最新PSU补丁程序. 目录: 一. 确认是 ...

  3. [LeetCode] Maximum XOR of Two Numbers in an Array 数组中异或值最大的两个数字

    Given a non-empty array of numbers, a0, a1, a2, … , an-1, where 0 ≤ ai < 231. Find the maximum re ...

  4. [PHP][位转换积累]之异或运算的简单加密应用

    异或的符号是^.按位异或运算, 对等长二进制模式按位或二进制数的每一位执行逻辑按位异或操作. 操作的结果是如果某位不同则该位为1, 否则该位为0. xor运算的逆运算是它本身,也就是说两次异或同一个数 ...

  5. Poj The xor-longest Path 经典题 Trie求n个数中任意两个异或最大值

    Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5646   Accepted: 1226 Description In an ...

  6. RMAN异机恢复遭遇ORA-01547、ORA-01152、ORA-01110错误案例

    测试环境:     操作系统  :  Red Hat Enterprise Linux ES release 4 (Nahant Update 4)   VMWARE     数据库     :  O ...

  7. RAC异机恢复

    RAC异机恢复PDCL到PFCL: PNCL:RAC+ASM ,product env   db name:PNCL   instance:PDCL1 PDCL2 PFCL:RAC+ASM ,perf ...

  8. BZOJ 3261: 最大异或和

    Description 一个序列,支持两个操作. 1.在序列尾加入一个数. 2.询问 [l,r] 中与 x 异或值最大的数. \(n\leqslant 3*10^5\) Sol 可持久化 Trie 树 ...

  9. 异或之(bzoj 3689)

    Description 给定n个非负整数A[1], A[2], --, A[n].对于每对(i, j)满足1 <= i < j <= n,得到一个新的数A[i] xor A[j],这 ...

随机推荐

  1. ACM之鸡血篇

    一匹黑马的诞生 故事还要从南京现场赛讲起,话说这次现场赛,各路ACM英雄豪杰齐聚南京,为争取亚洲总舵南京分舵舵主之职位,都使出了看 家本领,其中有最有实力的有京城两大帮清华帮,北大帮,南郡三大派上交派 ...

  2. 练习1-16:修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多地打印文本(C程序设计语言 第2版)

    该书英文配套答案 Answer to Exercise -, page Revise the main routine of the longest-line program so it will c ...

  3. IOS客户端Coding项目记录导航

    IOS客户端Coding项目记录(一) a:UITextField设置出现清除按键 b:绘画一条下划线  表格一些设置 c:可以定义表头跟底部视图(代码接上面) d:隐藏本页的导航栏 e:UIEdge ...

  4. Mac 下查看 Android Studio 的 SHA1的方法

    cmd -> ->cd .android ->keytool -v -list -keystore debug.keystore 默认口令:android ************* ...

  5. 投行风云:FO的酸甜苦辣【转】

    全世界收入最高的工作大概就是投行的FO前台部门 (Front Office)部门了.但在拿高薪的同时,也伴随着很多人难以想象的苦逼生活.作为投行最低层的分析师(Analyst),通常需要从早上10点工 ...

  6. CSS子元素居中(父元素宽高已知,子元素未知)

    <style> .container{width:400px; height:400px; position:relative;} .center{position:absolute; l ...

  7. How to Shorten the Paper

    . Remember: you are writing for an expert. Cross out all that is trivial or routine. . Avoid repetit ...

  8. winfrom中DataGridView绑定数据控件中DataGridViewCheckBoxColumn怎么选中

    ; i < this.dataGridView1.Rows.Count; i++) { this.dataGridView1.Rows[i].Cells["CheckBoxCulums ...

  9. #敏捷个人资料# 免费下载 《敏捷个人-认识自我,管理自我 v0.8.pdf》

    快乐.高效.平衡,做一个爱学习.有目标.懂生活的影响者. 从今天开始至7月31日,点击http://t.cn/Rv3koHU 免费收到 1000多页的 <敏捷个人-认识自我,管理自我 v0.8. ...

  10. Spring 4.1+ 的 JSONP使用

    如今的巨石应用已经越来越不行了,很多互联网在后期都会在用分布式的架构 那么在页面上不同的服务调用不同域名下的json是有问题的 (跨域:不同域名,相同域名但是不同端口) JavaScript规范中提到 ...