我们需要知道一个事实,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. 如何在github上下载单个文件夹?

    作者:ce ge链接:https://www.zhihu.com/question/25369412/answer/96174755来源:知乎著作权归作者所有,转载请联系作者获得授权. Git1.7. ...

  2. JS常用正则表达式

    1.IP地址验证 var reg = /^(([1-9])|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))\.(([0-9])|([1-9][0 ...

  3. BZOJ 3112: [Zjoi2013]防守战线 [单纯形法]

    题目描述 战线可以看作一个长度为n 的序列,现在需要在这个序列上建塔来防守敌兵,在序列第i 号位置上建一座塔有Ci 的花费,且一个位置可以建任意多的塔,费用累加计算.有m 个区间[L1, R1], [ ...

  4. 查找问题的利器 - Git Blame

    原文: http://gitbook.liuhui998.com/5_5.html  如果你要查看文件的每个部分是谁修改的, 那么 git blame 就是不二选择. 只要运行'git blame [ ...

  5. jquery总结02-样式和属性

    .attr()  .removeAttr() 设置属性和移除属性,里面可以是属性,属性值 ,只有属性名时只获取第一个蒜素的属性值 .html() .text() .val()  html 获取包括标签 ...

  6. 实现gabor filter的滤波

    实现gabor filter的滤波       图像纹理对于航空遥感图片.织物图案.复杂自然风景和动植物都适合.这里我采用遥感图片.织物图案和钢铁表面来做,并和canny图片进行一定的对比.     ...

  7. nn package

    1.nn模块是神经网络模块 2.父类module,子类Sequential, Parallel和Concat 3.Linear:做线性变换 4.criterion 这个模块包含了各式各样的训练时的损失 ...

  8. FlushMode属性与transaction(spring注入的事务)

    一.参见hibernate的api http://tool.oschina.net/apidocs/apidoc?api=hibernate-3.6.10 http://tool.oschina.ne ...

  9. Javascript的简介和使用

    摘要:先讨论JavaScript的由来和一些比较容易混淆的概念,又讨论了JavaScript的实现,紧接着说明了在网页中怎么有效地更好地引入js代码. JavaScript的由来 是从一个简单的输入验 ...

  10. Ext.Net学习笔记10:Ext.Net ComboBox用法

    ComboBox是最常用的控件之一,它与HTML中的Select控件很像,但可以进行多选.自定义显示格式.分页等. ComboBox用法 <ext:ComboBox runat="se ...