【简】题解 P5283 [十二省联考2019]异或粽子
传送门:P5283 [十二省联考2019]异或粽子
题目大意:
给一个长度为n的数列,找到异或和为前k大的区间,并求出这些区间的异或和的代数和。
QWQ:
考试时想到了前缀异或 想到了对每个数按二进制拆分 最高位取一定比前面所有取优
但是呆住了 没有想到是对前缀异或拆分
对于位运算等操作可以考虑 线性基和trie
因为 ai xor aj=aj xor ai 所以吧这种情况算进去就取ans/2
因为 i=j 时异或为0是最小的 不会影响答案
把各个前缀异或插进数组
询问强制以每个点为前面的一个端点 查询第x大的值
先把所有的第1大的插进堆里
每次取堆中最大 统计答案
设当前取出的最大是强制的区间第x大 把区间第x+1大插入队里
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define C getchar()-48
inline ll read()
{
ll s=0,r=1;
char c=C;
for(;c<0||c>9;c=C) if(c==-3) r=-1;
for(;c>=0&&c<=9;c=C) s=(s<<3)+(s<<1)+c;
return s*r;
}
#define R register
const ll N=20000000+10;
ll n,k,ans;
ll a[N],sum[N],sz[N];
ll tr[N][2],top;
struct xin{
ll w,cs,v;
friend bool operator < (xin a,xin b)
{
return a.v<b.v;
}
};
priority_queue<xin>q;
inline void into(ll v)
{
int u=0;
for(int i=31;i>=0;i--)
{
ll tmp=(v>>i)&1;sz[u]++;
if(!tr[u][tmp]) tr[u][tmp]=++top;
u=tr[u][tmp];
}
sz[u]++;
}
inline ll ask(ll v,int cs)
{
ll u=0,ans=0;
for(int i=31;i>=0;i--)
{
ll tmp=(v>>i)&1;
if(!tr[u][tmp^1]){u=tr[u][tmp];continue;}
if(cs<=sz[tr[u][tmp^1]]){u=tr[u][tmp^1];ans|=1LL<<i;continue;}
if(cs>sz[tr[u][tmp^1]]){cs-=sz[tr[u][tmp^1]];u=tr[u][tmp];continue;}
}
return ans;
}
int main()
{
freopen("xor.in","r",stdin);
freopen("xor.out","w",stdout);
n=read();k=read();k<<=1;
for(R int i=1;i<=n;i++) a[i]=read();
for(R int i=1;i<=n;i++) sum[i]=sum[i-1]^a[i];
for(int i=0;i<=n;i++) into(sum[i]);
for(int i=0;i<=n;i++) q.push((xin){i,1,ask(sum[i],1)});
for(int i=1;i<=k;i++)
{
xin tmp=q.top();q.pop();ans+=tmp.v;
if(tmp.cs<n) q.push((xin){tmp.w,tmp.cs+1,ask(sum[tmp.w],tmp.cs+1)});
}
cout<<(ans>>1)<<endl;
return 0;
}
【简】题解 P5283 [十二省联考2019]异或粽子的更多相关文章
- 【题解】Luogu P5283 [十二省联考2019]异或粽子
原题传送门 看见一段的异或和不难想到要做异或前缀和\(s\) 我们便将问题转化成:给定\(n\)个数,求异或值最靠前的\(k\)对之和 我们珂以建一个可持久化01trie,这样我们就珂以求出每个值\( ...
- P5283 [十二省联考2019]异或粽子 可持久化01Trie+线段树
$ \color{#0066ff}{ 题目描述 }$ 小粽是一个喜欢吃粽子的好孩子.今天她在家里自己做起了粽子. 小粽面前有 \(n\) 种互不相同的粽子馅儿,小粽将它们摆放为了一排,并从左至右编号为 ...
- Luogu P5283 [十二省联考2019]异或粽子
感觉不是很难的一题,想了0.5h左右(思路歪了,不过想了一个大常数的两只\(\log\)做法233) 然后码+调了1h,除了一个SB的数组开小外基本上也没什么坑点 先讲一个先想到的方法,我们对于这种问 ...
- P5283 [十二省联考2019]异或粽子
考场上想到了没打完,细节思路还是不是很优,我原先的想法是每一次找完后标记那个点,下次再继续找(并不是这个意思,说不清楚)但实际上和平衡树一样加个大小就很好写了 #include<bits/std ...
- 【BZOJ5495】[十二省联考2019]异或粽子(主席树,贪心)
[BZOJ5495][十二省联考2019]异或粽子(主席树,贪心) 题面 BZOJ 洛谷 题解 这不是送分题吗... 转异或前缀和,构建可持久化\(Trie\). 然后拿一个堆维护每次的最大值,每次如 ...
- [十二省联考2019]异或粽子 01trie
[十二省联考2019]异或粽子 01trie 链接 luogu 思路 首先求前k大的(xo[i]^xo[j])(i<j). 考场上只想到01trie,不怎么会写可持久,就写了n个01trie,和 ...
- [十二省联考2019]异或粽子——可持久化trie树+堆
题目链接: [十二省联考2019]异或粽子 求前$k$大异或区间,可以发现$k$比较小,我们考虑找出每个区间. 为了快速得到一个区间的异或和,将原序列做前缀异或和. 对于每个点作为右端点时,我们维护出 ...
- Luogu P5283 / LOJ3048 【[十二省联考2019]异或粽子】
联考Day1T1...一个考场上蠢了只想到\(O(n^2)\)复杂度的数据结构题 题目大意: 求前\(k\)大区间异或和的和 题目思路: 真的就是个sb数据结构题,可持久化01Trie能过(开O2). ...
- 洛谷P5283 & LOJ3048:[十二省联考2019]异或粽子——题解
https://www.luogu.org/problemnew/show/P5283 https://loj.ac/problem/3048 小粽是一个喜欢吃粽子的好孩子.今天她在家里自己做起了粽子 ...
随机推荐
- vi/vim 常用命令总结
目录 Linux vi/vim编辑 vim键盘图 vim的三种模式 命令模式.输入模式.输出模式 vim使用实例 vi/vim按键说明 第一部分:一般模式可用的光标移动.复制粘贴.搜索替换等 第二部分 ...
- 菜鸡的Java笔记 第三十二 - java 静态导入的实现
静态导入的实现 为了理解静态导入的操作产生的动机,下面通过一个具体的代码来观察 范例:现在有一个 Import 的类,这个类中的方法全部都是 static 方法 packa ...
- Mastering-VSCode
中英文等宽 14寸1920x1080, Win10, 设置如下(前两个字体就够了), 字号14,16都可以. 需要下载UbuntuMono字体. 如果分表率低如14寸1366x768,可尝试 Inco ...
- Java设计模式之(四)——原型模式
1.什么是原型模式 Specify the kinds of objects to create using a prototypical instance,and create new object ...
- [bzoj1115]石子游戏
考虑令$bi=ai-a_{i-1}$,那么每一次操作相当于让$bi-=x$且$b_{i+1}+=x$,相当于从i向i+1移动x个石子,那么容易发现偶数堆没有用处,因为另一方可以用同样的操作,因此问题相 ...
- JAVA后端方面,如何快速达到能实习的程度
概要地讲,是先广度再深度,面试开发两手抓. 首先说学习方法,因为很多初学者没继续下去,不是能力不行,而是方法不当.对比下错误和正确的方法. 1 光看视频光看资料不动手连,这样转眼就忘.正确的做 ...
- Cortex-A系列中断
1. 回顾STM32系统 1.1 中断向量表 ARM芯片冲0x00000000,在程序开始的地方存放中断向量表,按下中断时,就相当于告诉CPU进入的函数.描述很多个中断服务函数的表. 对于STM32来 ...
- CF1574D The Strongest Build
考虑到有\(m\)个限制,可以考虑\(m+1\)个最大的答案,这样可以利用鸽笼原理得到答案. 这是一般做法. 但是这样的题目,我们发现\(n\)个操作都是独立的. 那么我们可以全部都选取最大,并以此调 ...
- R shiny 小工具Windows本地打包部署
目录 服务器部署简介 windows打包部署 1. 部署基本框架 2.安装shiny脚本需要的依赖包 3.创建运行shiny的程序 [报错解决]无法定位程序输入点EXTPTE_PTR于动态链接库 将小 ...
- [Linux] 非root安装GCC9.1.0
说明 一般Linux系统自带或公共的GCC版本都很低,如目前我们的服务器版本的GCC还停留在gcc-4.9.3,而官网已到达9.2版本(下载http://ftp.gnu.org/gnu/gcc/) , ...