题意

共有\(n\)个数,选择\(k\)个不同的\([l,r]\)区间,使得它们的异或和最大

$ 1 \leq n \leq 5 \times 10^5,k \leq 2 \times 10^5$

思路

先会想到前缀异或和,这样求\([l,r]\)区间异或和只需要用\(pre[l-1]\oplus pre[r]\)以此减少运算次数。然后由于是异或,又会想到\(trie\),然后想一想,好像要用可持久化!!!完了太菜了不会。

但为了偷懒,必须思考。思考过后发现,不用可持久化,\([l,r]\)区间算\([l,r],[r,l]\)两次,答案再除二就好了

#include <bits/stdc++.h>
using std::priority_queue;
const int N=500005;
long long trie[N<<5][2],a[N],x,ans;
int tot=1,n,k,size[N<<5];
struct note{
int x,rk;
long long w;
bool operator < (const note &a)const{return w<a.w;}
};
priority_queue <note> q;
long long read(){
long long t=0;
char c=getchar();
while (c<'0' || c>'9')
c=getchar();
while (c>='0' && c<='9') t=t*10+c-'0',c=getchar();
return t;
} void add(long long x){
int u=1;
for (int i=31;i>=0;i--){
int t=(x>>i)&1;
size[u]++;
if (!trie[u][t]) trie[u][t]=++tot;
u=trie[u][t];
}
size[u]++;
}
long long query(long long x,int k){
long long ans=0;
int u=1;
for (int i=31;i>=0;i--){
int t=(x>>i)&1;
if (trie[u][t^1] && size[trie[u][t^1]]>=k)
u=trie[u][t^1],ans^=1LL<<i;
else k-=size[trie[u][t^1]],u=trie[u][t];
}
return ans;
}
int main(){
scanf("%d%d",&n,&k);
for (int i=1;i<=n;i++){
x=read();
a[i]=a[i-1]^x;
add(a[i]);
}
add(0);
for (int i=0;i<=n;i++) q.push(note{i,1,query(a[i],1)});
for (int i=1;i<=k*2;i++){
note t=q.top();q.pop();
ans+=t.w;
if (t.rk<=n) q.push(note{t.x,t.rk+1,query(a[t.x],t.rk+1)});
}
printf("%lld",ans/2);
}

上海省选浪的太开心了,太菜了第二天\(99\)难受

LG5283 异或粽子的更多相关文章

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

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

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

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

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

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

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

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

  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. P5283 [十二省联考2019]异或粽子 可持久化01Trie+线段树

    $ \color{#0066ff}{ 题目描述 }$ 小粽是一个喜欢吃粽子的好孩子.今天她在家里自己做起了粽子. 小粽面前有 \(n\) 种互不相同的粽子馅儿,小粽将它们摆放为了一排,并从左至右编号为 ...

  9. 「十二省联考 2019」异或粽子——tire树+堆

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

随机推荐

  1. java7:核心技术与最佳实践读书笔记——类加载

    流程:class -> 加载 ->  jvm虚拟机 -> 链接 . 一.类加载器概述 1.引出      类加载器也是一个java类,java.lang.ClassLoader类是所 ...

  2. Eclipse MyEclipse 反编译.class文件 myeclipse source not found

    首先,需要下载两个必须的插件包. 一个是:准备反编译需要的jad.exe 下载地址:http://varaneckas.com/jad/ 二个是:反编译编辑器net.sf.jadclipse_3.3. ...

  3. UPX编译及so加固

    UPX编译及so加固 来源 https://www.cnblogs.com/Reverser/p/5778042.html 参考 http://www.cnblogs.com/fishou/p/420 ...

  4. Django rest-framework框架-用户权限实例

    简单实例: class MyPermission(object): ''' 权限控制类 ''' def has_permission(self,request,view): if request.us ...

  5. 关于微信小程序中的样式使用变量值的方法

    在开发过程中,通常碰到样式非固定的情况,这时候就要使用变量来规定样式,例如,一个view的宽度需要使用变量: 1. 在wxss中,定义变量:width:var(--width--); 2. 在js中, ...

  6. multer使用

    使用multer 1.      在项目中下载multer操作模块 Npm install multer  --save 前端代码: <form class="layui-form&q ...

  7. HTML 5浏览器端数据库

    HTML 5浏览器端数据库为什么要使用浏览器端数据库:随着浏览器处理能力的增强,越来越多的双喜鸟网站开始考虑在客户端存储大量的数据,这可以减少用户从服务器获取数据的等待时间. 1.本地存储-本地存储可 ...

  8. SCRUM 是一个用于开发和维护复杂产品的框架

    转自:http://www.scrumcn.com/agile/scrum-knowledge-library/scrum.html#tab-id-1 Scrum 是一个用于开发和维护复杂产品的框架 ...

  9. SIFT算法相关资料

    SIFT算法相关资料 一.SIFT算法的教程.源码及应用软件1.ubc:DAVID LOWE---SIFT算法的创始人,两篇巨经典经典的文章http://www.cs.ubc.ca/~lowe/ 2. ...

  10. Django阶段总结与Ajax

    一.路由控制 二.视图层 三.模板层 四.模型层.单表操作.多表操作 五.什么是ajax 一.路由控制 补充点(什么是web应用?) 网站:BS架构应用程序:B是浏览器  S:server(实现了ws ...