先对其求出前缀异或和,然后$o(k)$次枚举,每次选择最大值,考虑如何维护
可以全局开一个堆,维护出每一个点的最大值的最大值,那么相当于要在一个点中删去一个点再找到最大值
将这些删去的点重新建成一颗trie树,与所有数构成的trie树减一下,就可以找到新的最大值了,再用堆维护即可
有一些细节:1.数值范围较大,需要开long long;2.由于无法判断位置关系,因此要取2k个并将答案除以2

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 500005
4 #define ll long long
5 set<pair<ll,int> >s;
6 int V,n,m,ch[N*70][2],sz[N*70];
7 ll ans,a[N];
8 void add(int k,ll x){
9 sz[k]++;
10 for(int i=31;i>=0;i--){
11 int p=((((1LL<<i)&x)>0));
12 if (!ch[k][p])ch[k][p]=++V;
13 k=ch[k][p];
14 sz[k]++;
15 }
16 }
17 ll query(int k1,int k2,ll x){
18 ll ans=0;
19 for(int i=31;i>=0;i--){
20 int p=(((1LL<<i)&x)==0);
21 if (sz[ch[k1][p]]==sz[ch[k2][p]])p^=1;
22 ans+=p*(1LL<<i);
23 k1=ch[k1][p];
24 k2=ch[k2][p];
25 }
26 return ans;
27 }
28 int main(){
29 scanf("%d%d",&n,&m);
30 for(int i=1;i<=n;i++){
31 scanf("%lld",&a[i]);
32 a[i]^=a[i-1];
33 }
34 V=n+2;
35 for(int i=0;i<=n;i++)add(1,a[i]);
36 for(int i=0;i<=n;i++)s.insert(make_pair(-(a[i]^query(1,i+2,a[i])),i));
37 m*=2;
38 for(int i=1;i<=m;i++){
39 ans-=(*s.begin()).first;
40 int k=(*s.begin()).second;
41 s.erase(s.begin());
42 add(k+2,query(1,k+2,a[k]));
43 s.insert(make_pair(-(a[k]^query(1,k+2,a[k])),k));
44 }
45 printf("%lld",ans/2);
46 }

[loj3048]异或粽子的更多相关文章

  1. LOJ3048 「十二省联考 2019」异或粽子

    题意 题目描述 小粽是一个喜欢吃粽子的好孩子.今天她在家里自己做起了粽子. 小粽面前有 $n$ 种互不相同的粽子馅儿,小粽将它们摆放为了一排,并从左至右编号为 $1$ 到 $n$.第 $i$ 种馅儿具 ...

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

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

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

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

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

    [十二省联考2019]异或粽子 01trie 链接 luogu 思路 首先求前k大的(xo[i]^xo[j])(i<j). 考场上只想到01trie,不怎么会写可持久,就写了n个01trie,和 ...

  5. 『异或粽子 堆 可持久化trie』

    异或粽子 Description 小粽是一个喜欢吃粽子的好孩子.今天她在家里自己做起了粽子. 小粽面前有 n 种互不相同的粽子馅儿,小粽将它们摆放为了一排,并从左至右编号为 1 到 n.第 i 种馅儿 ...

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

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

  7. 洛谷P5283 & LOJ3048:[十二省联考2019]异或粽子——题解

    https://www.luogu.org/problemnew/show/P5283 https://loj.ac/problem/3048 小粽是一个喜欢吃粽子的好孩子.今天她在家里自己做起了粽子 ...

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

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

  9. 「洛谷5283」「LOJ3048」「十二省联考2019」异或粽子【可持久化01trie+优先队列】

    题目链接 [洛谷传送门] [LOJ传送门] 题目大意 让你求区间异或和前\(k\)大的异或和的和. 正解 这道题目是Blue sky大佬教我做的(祝贺bluesky大佬进HA省A队) 我们做过某一些题 ...

随机推荐

  1. 从零入门 Serverless | 函数计算的开发与配置

    导读:在本篇文章中,"基本概念"部分主要对函数计算最核心的概念进行详细介绍,包括服务.函数.触发器.版本.别名以及相关的配置:"开发流程"部分介绍了基于函数计算 ...

  2. VS Code环境配置

    1.语言配置 2.Node.js安装配置 系统变量中NODE_PATH,变量值为nodejs的安装路径. 用户变量Path包含%NODE_PATH% 如果说通过CMD打开的命令行可以执行node -v ...

  3. 基于Hyperledger Fabric实现ERC721

    介绍 超级账本(Hyperledger)项目是首个面向企业应用场景的开源分布式账本平台.由linux基金会牵头,包括 IBM 等 30家初始企业成员共同成立的. 区块链网络主要有三种类型:公共区块链. ...

  4. THUSC & 中考 & NOI 拉跨记

    THUSC 的拉胯记 时代比较久远了,可能有些事情记不清楚了. Day -\(\infty\) 本来说只有我.llsw.wxk过了审核,后来wy.lyc也搞了个体验营名额,于是和高二的一起集训. Da ...

  5. CF468C Hack it! 超详细解答

    CF468C Hack it! 超详细解答 构造+数学推导 原文极简体验 CF468C Hack it! 题目简化: 令\(f(x)\)表示\(x\)在十进制下各位数字之和 给定一整数\(a\)构造\ ...

  6. 2020.12.20-Codeforces Round #105补题

    B - Escape The princess is going to escape the dragon's cave, and she needs to plan it carefully. Th ...

  7. 浅尝装饰器和AOP

    [写在前面] 参考文章:https://www.cnblogs.com/huxi/archive/2011/03/01/1967600.html[从简单的例子入手进行讲解,由浅入深,很到位] 装饰器部 ...

  8. MySQL复习(二)MySQL基本数据类型

    MySQL基本数据类型 常用的字段类型大致可以分为数值类型.字符串类型.日期时间类型三大类 1. 数值类型 数值类型可以分为整型.浮点型.定点型三小类. 1.1 整型 (tiny:极小的, small ...

  9. Stack2 攻防世界题目分析

    ---XCTF 4th-QCTF-2018 前言,怎么说呢,这题目还是把我折磨的可以的,我一开始是没有看到后面的直接狙击的,只能说呢. 我的不经意间的粗心,破坏了你许多的温柔 1.气的我直接检查保护: ...

  10. Node.js躬行记(13)——MySQL归档

    当前我们组管理着一套审核系统,除了数据源是服务端提供的,其余后台管理都是由我们组在维护. 这个系统就是将APP中的各类社交信息送到后台,然后有专门的审核人员来判断信息是否合规,当然在送到后台之前已经让 ...