[十二省联考2019]异或粽子 01trie

链接

luogu

思路

首先求前k大的(xo[i]^xo[j])(i<j)。

考场上只想到01trie,不怎么会写可持久,就写了n个01trie,和直接sort一样、、

咳咳,官方题解是。

一个堆维护i为终点,可以取得位置为\([L,R]\)的最大值为val。

每次选最大的,然后将这个点分裂成两个:

i为终点,可以取得位置为\([L,x-1]\)的最大值为\(val_1\)。

i为终点,可以取得位置为\([x+1,R]\)的最大值为\(val_2\)。

具体咋维护,可持久01trie(他应该就是说的主席树,忘记啦)。

其实可以直接是直接记录当前应该取第几大,建立可持久化01trie

还有一种是把k*2,这样消去了大小限制,直接建立一颗01trie,在上面跑k大,最后除以2

对角线上是有重复的,但是你一定选不到呀,xor起来为0

错误

1.一个hello wrold居然跑10s,垃圾病毒防护天天扫我exe。

2.我居然不知道trie可以求第k大xor值,菜的一批、、、、

代码

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 5e5 + 6;
ll read() {
ll x = 0, f = 1; char s = getchar();
for (; s > '9' || s < '0'; s = getchar()) if (s == '-') f = -1;
for (; s >= '0' && s <= '9'; s = getchar()) x = x * 10 + s - '0';
return x * f;
}
int n, k, cnt=1, num[N];
ll a[N];
struct node {
int ch[2], siz;
} e[N * 35];
priority_queue<pair<ll, int> > q;
void insert(ll x) {
int p = 1;
for (int i = 31; i >= 0; --i) {
bool T_T = x & (1LL << i);
e[p].siz++;
if (!e[p].ch[T_T])
e[p].ch[T_T] = ++cnt;
p = e[p].ch[T_T];
}
e[p].siz++;
}
ll k_th(ll x, int k) {
if (k > n)
return 0;
ll ans = 0;
int p = 1;
for (int i = 31; i >= 0; --i) {
bool T_T = x & (1LL << i);
if (e[e[p].ch[T_T ^ 1]].siz >= k)
ans = ans | (1LL << i), p = e[p].ch[T_T ^ 1];
else
k -= e[e[p].ch[T_T ^ 1]].siz, p = e[p].ch[T_T];
}
return ans;
}
int main() {
n = read(), k = read() * 2;
insert(0);
for (int i = 1; i <= n; ++i) a[i] = a[i - 1] ^ read(), insert(a[i]);
for (int i = 0; i <= n; ++i) q.push(make_pair(k_th(a[i],num[i]=1),i));
ll ans = 0;
while (k--) {
pair<ll, int> u = q.top();
q.pop();
ans += u.first;
u.first=k_th(a[u.second],++num[u.second]);
if(num[u.second]<n) q.push(u);
}
cout << ans / 2 << "\n";
return 0;
}

[十二省联考2019]异或粽子 01trie的更多相关文章

  1. [十二省联考2019]异或粽子——可持久化trie树+堆

    题目链接: [十二省联考2019]异或粽子 求前$k$大异或区间,可以发现$k$比较小,我们考虑找出每个区间. 为了快速得到一个区间的异或和,将原序列做前缀异或和. 对于每个点作为右端点时,我们维护出 ...

  2. 【BZOJ5495】[十二省联考2019]异或粽子(主席树,贪心)

    [BZOJ5495][十二省联考2019]异或粽子(主席树,贪心) 题面 BZOJ 洛谷 题解 这不是送分题吗... 转异或前缀和,构建可持久化\(Trie\). 然后拿一个堆维护每次的最大值,每次如 ...

  3. 【简】题解 P5283 [十二省联考2019]异或粽子

    传送门:P5283 [十二省联考2019]异或粽子 题目大意: 给一个长度为n的数列,找到异或和为前k大的区间,并求出这些区间的异或和的代数和. QWQ: 考试时想到了前缀异或 想到了对每个数按二进制 ...

  4. Luogu P5283 / LOJ3048 【[十二省联考2019]异或粽子】

    联考Day1T1...一个考场上蠢了只想到\(O(n^2)\)复杂度的数据结构题 题目大意: 求前\(k\)大区间异或和的和 题目思路: 真的就是个sb数据结构题,可持久化01Trie能过(开O2). ...

  5. Luogu P5283 [十二省联考2019]异或粽子

    感觉不是很难的一题,想了0.5h左右(思路歪了,不过想了一个大常数的两只\(\log\)做法233) 然后码+调了1h,除了一个SB的数组开小外基本上也没什么坑点 先讲一个先想到的方法,我们对于这种问 ...

  6. [十二省联考2019]异或粽子(堆+可持久化Trie)

    前置芝士:可持久化Trie & 堆 类似于超级钢琴,我们用堆维护一个四元组\((st, l, r, pos)\)表示以\(st\)为起点,终点在\([l, r]\)内,里面的最大值的位置为\( ...

  7. Luogu5283 十二省联考2019异或粽子(trie/可持久化trie+堆)

    做前缀异或和,用堆维护一个五元组(x,l,r,p,v),x为区间右端点的值,l~r为区间左端点的范围,p为x在l~r中最大异或和的位置,v为该最大异或和,每次从堆中取出v最大的元素,以p为界将其切成两 ...

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

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

  9. [十二省联考2019]异或粽子 (可持久化01tire 堆)

    /* 查询异或最大值的方法是前缀和一下, 在01trie上二分 那么我们可以对于n个位置每个地方先求出最大的数, 然后把n个信息扔到堆里, 当我们拿出某个位置的信息时, 将他去除当前最大后最大的信息插 ...

随机推荐

  1. 栈->栈与递归

    文字简述 1.阶乘函数 2.2阶Fiibonacci数列 3.n阶Hanoi塔问题 代码实现 // // Created by lady on 19-4-3. // #include <stdi ...

  2. numpy(二)

    通用函数: np.add  加 np.subtract  减 np.multiply  乘 np.divide  除 np.floor_divide  地板乘除法,取商 np.power  指数运算  ...

  3. AOP代理对象生成

    AOP(Aspect-OrientedProgramming,面向方面编程)是OOP(Object-Oriented Programing,面向对象编程)的良好补充与完善,后者侧重于解决 从上到下的存 ...

  4. netty例子

    流式编程 客户端 这里MessageToByteEncoder继承于outchanel 服务端

  5. 2018-2019-2 网络对抗技术 20165236 Exp5 MSF基础应用

    2018-2019-2 网络对抗技术 20165236 Exp5 MSF基础应用 一. 实践内容(3.5分) 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要 ...

  6. BeautifulSoup库的使用

    1.简介 BeautifulSoup库也是一个HTML/XML的解析器,其使用起来很简单,但是其实解析网站用xpath和re已经足矣,这个库其实很少用到.因为其占用内存资源还是比xpath更高. '' ...

  7. ajax阻挡设置

    在请求时候设置一个变量为false的.请求方法时候用他的值判断是否在请求中,如果是true就是有请求了,就直接return ,不执行后面的方法, 如果是没有请求,就让值为true,然后开始执行ajax ...

  8. 《linux就该这么学》第十三节课:第11章和第12章,vsftpd服务与samba和nfs服务

    第十一章 (借鉴请改动) 11.1.文件传输协议 FTP文件穿数协议,端口20用于数据传输,21端口用于传输相关FTP命令 ftp协议的两种工作模式: 主动模式:ftp向客户端发起 被动模式(默认): ...

  9. zabbix监控实战<1>

    第一章 监控家族 1.1 为什么选择监控? 因为在一个IT集群中或者是一个大环境中,包括各种硬件设备.软件设备等系统的构成也是极其复杂的. 多种应用构成负载的IT业务系统,保证这些资源的正常运转,是一 ...

  10. djanggo中自定义过滤器的步骤图解