【十二省联考2019】异或粽子【01Trie】【堆】【前k大套路】
题意:给定长度为nnn的序列aaa,求前kkk大的区间异或和之和。
n≤5×105,k≤min(n(n−1)2,2×105),ai<232n\leq 5\times 10^5,k\leq \min(\frac{n(n-1)}2,2\times10^5),a_i<2^{32}n≤5×105,k≤min(2n(n−1),2×105),ai<232
原来省选题这么裸,i了i了
显然先求一个前缀异或,然后区间异或转换为两个数的异或
把kkk乘上222,最后答案再除回来,这样没有了顺序限制
然后对于这种前kkk大之和或某些第kkk大的问题的套路:
把所有情况分成sss个集合,对每个集合找到一种方式,可由一个数在O(m)O(m)O(m)时间内得到nnn个比这个数小的数,且每个数都会被遍历到,然后用堆维护这个东西。这样复杂度是O(s+kmlog(s+kn))O(s+km\log(s+kn))O(s+kmlog(s+kn))
本题中集合为每个数和其他所有数的异或。建个字典树,然后每次暴力询问第kkk大即可。
复杂度O(nlogV+klognlogV)O(n\log V+k\log n\log V)O(nlogV+klognlogV)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <queue>
#include <utility>
#define MAXN 500005
using namespace std;
typedef unsigned int uint;
typedef long long ll;
uint read()
{uint ans=0;char c=getchar();while (!isdigit(c)) c=getchar();while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();return ans;
}
int ch[MAXN<<5][2],siz[MAXN<<5],cnt=1;
void insert(uint v)
{int x=1;for (int i=31;i>=0;i--){int& nxt=ch[x][(v>>i)&1];if (!nxt) nxt=++cnt;++siz[x],x=nxt;}++siz[x];
}
uint query(uint v,int k)
{uint ans=0;int x=1;for (int i=31;i>=0;i--){int d=(v>>i)&1;if (ch[x][d^1]&&k<=siz[ch[x][d^1]]) ans|=1<<i,x=ch[x][d^1];else k-=siz[ch[x][d^1]],x=ch[x][d];}return ans;
}
typedef pair<uint,int> pi;
priority_queue<pi> q;
int rk[MAXN];
uint a[MAXN];
int main()
{int n,k;scanf("%d%d",&n,&k);k<<=1;for (int i=1;i<=n;i++) a[i]=a[i-1]^read();for (int i=0;i<=n;i++) insert(a[i]);ll ans=0;for (int i=0;i<=n;i++) q.push(make_pair(query(a[i],rk[i]=1),i));while (k--){pi t=q.top();q.pop();ans+=t.first;q.push(make_pair(query(a[t.second],++rk[t.second]),t.second));}printf("%lld\n",ans>>1);return 0;
}
【十二省联考2019】异或粽子【01Trie】【堆】【前k大套路】相关推荐
- 可持久化Trie+堆优化 OR Trie树上求XOR第K大 ---- P5283 [十二省联考2019]异或粽子
题目大意 题目大意: 考虑先做个 prefix xor 前缀异或bi=⨁j=1iaj(1≤i≤n)b_i=\bigoplus_{j=1}^{i}a_j(1\leq i \leq n)bi=j=1⨁i ...
- [十二省联考 2019] 异或粽子(可持久化字典树 + 二叉堆)
problem luogu-P5283 小粽是一个喜欢吃粽子的好孩子.今天她在家里自己做起了粽子. 小粽面前有 nnn 种互不相同的粽子馅儿,小粽将它们摆放为了一排,并从左至右编号为 111 到 nn ...
- P5283-[十二省联考2019]异或粽子【可持久化Trie,堆】
正题 题目链接:https://www.luogu.org/problemnew/show/P5283 题目大意 给定一个序列,求kkk个不同的的[l..r][l..r][l..r]的区间异或值的和最 ...
- 十二省联考 2019 题解
[十二省联考2019]异或粽子 首先异或转前缀和,类似超级钢琴,将三元组 ( l , r , p ) (l,r,p) (l,r,p) 插入堆,表示 s u m [ p ] sum[p] sum[p] ...
- 【BZOJ5498】[十二省联考2019]皮配(动态规划)
[BZOJ5498][十二省联考2019]皮配(动态规划) 题面 BZOJ 洛谷 题解 先考虑暴力\(dp\),设\(f[i][j][k]\)表示前\(i\)所学校,有\(j\)人在某个阵营,有\(k ...
- [十二省联考2019]春节十二响——长链剖分+堆
题目链接: [十二省联考2019]春节十二响 可以发现每条链上的所有点都要放在不同的段里,那么最多只需要树的深度这么多段就够了. 因为这样可以保证每条链上的点可以放在不同的段中而且一个点放在这些段中一 ...
- 「十二省联考 2019」皮配——dp
题目 [题目描述] #### 题目背景 一年一度的综艺节目<中国好码农>又开始了.本季度,好码农由 Yazid.Zayid.小 R.大 R 四位梦想导师坐镇,他们都将组建自己的梦想战队,并 ...
- 【十二省联考2019】春节十二响
题面 https://www.luogu.org/problem/P5290 题解 真的是我傻逼,十二省联考$day2$至今还是我的噩梦.$day1$起码一直在调可持久化$trie$树,$day2$真 ...
- 十二省联考2019酱油记
在中考前去省选玩一趟. Day -1 对于一个还没有学会所有省选内容的初三Oier来说,这一趟真的是去打酱油的啊.但还是要认真复习. 最近几天在字符串的路上越走越远-晚上才开始复习图论.还有一大堆没有 ...
最新文章
- windows共享linux的某一文件夹
- python网课阿里云_关于python视频教程的阿里云网站内容
- java equal 不等于_java Integer判断相等只能使用equals(不能使用==)
- 【转】实战 SSH 端口转发
- ssh主机之间建立互信 --免密码
- 数据分析与挖掘实战-航空公司客户价值分析
- 程序员的3年之痒改变的不止薪水(转载)
- 【HDU - 5876】Sparse Graph(补图bfs,STLset)
- android+放大缩小图片+有jar嘛,Android相册支持点击放大图片,滑动切换图片,手势放大缩小...
- 差分隐私 python_[宜配屋]听图阁
- React基础篇(五)css样式的使用
- java 排队实现_java中的优先列队-PriorityQueue源码实现解析
- rk3288 android6.0平台bt1120信号转mipi调试
- 安徽2022农民丰收节 国稻种芯:郑栅洁启动舒城主场活动仪式
- 改写[转载]关闭危险端口的批处理文件FOR WIN7
- 头哥教学平台-泰坦尼克号生还预测
- centos7输入ifconfg找不到ens33/eth0网卡信息,且service network restart重启网络失败
- 参数维纳滤波(Parametric Wiener Filter)
- i 标签怎么关闭_中山不干胶标签生产厂家——飞盛条码标识技术
- 数字孪生系统:智慧城市数据可视化
热门文章
- python mssql github_GitHub上最热门的开源项目都在这里了
- 一个人动情之后的表现......
- 发了篇paper,双非二本的她直博浙大
- 北方人的快乐。。。| 今日最佳
- Java学习笔记之 IO包 字节流
- dockerfile文件名_Linux云计算教程全套视频合集:Dockerfile详解(一)
- 需求分析 应该先写业务还是功能_一个套路,拆解常见数据分析需求
- java定时器写法_java定时器的写法是什么样?
- linux 查询系统性能,Linux 系统各种性能查询
- systrace html空白,Android性能优化之Systrace工具介绍(一) _ Systrace生成的trace.html打开空白或者打不开的解决办法...