BZOJ3689: 异或之
题解:类似与超级钢琴的做法 直接用堆维护即可 (
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <stack>
#include <queue>
#include <cmath>
#include <set>
#include <map>
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define link(x) for(edge *j=h[x];j;j=j->next)
#define inc(i,l,r) for(int i=l;i<=r;i++)
#define dec(i,r,l) for(int i=r;i>=l;i--)
const int MAXN=3e5+10;
const double eps=1e-8;
#define ll long long
using namespace std;
struct edge{int t,v;edge*next;}e[MAXN<<1],*h[MAXN],*o=e;
void add(int x,int y,int vul){o->t=y;o->v=vul;o->next=h[x];h[x]=o++;}
ll read(){ll x=0,f=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(isdigit(ch))x=x*10+ch-'0',ch=getchar();return x*f;
}
int n,k,cnt;
int a[MAXN],rt[MAXN],tag[MAXN*32];
typedef struct node{int l,r,sum;
}node;
node d[MAXN*32];
void insert(int x,int k,int id){for(int i=30;i>=0;i--){if(k&(1<<i)){int t=++cnt;d[t]=d[d[x].r];d[x].r=t;d[t].sum++;x=t;}else{int t=++cnt;d[t]=d[d[x].l];d[x].l=t;d[t].sum++;x=t;}}tag[x]=id;
}
pair<int,int> querty(int x,int y,int k){int res=0;for(int i=30;i>=0;i--){if(k&(1<<i)){if(d[d[y].r].sum-d[d[x].r].sum)res+=(1<<i),x=d[x].r,y=d[y].r;else x=d[x].l,y=d[y].l;}else{if(d[d[y].l].sum-d[d[x].l].sum)x=d[x].l,y=d[y].l;else res+=(1<<i),x=d[x].r,y=d[y].r;}}res^=k;return mp(tag[y],res);
}
typedef struct Tmp{int pos,l,r,key,aim;friend bool operator<(Tmp aa,Tmp bb){return aa.key>bb.key;}
}Tmp;
priority_queue<Tmp>que;
vector<int>vec;
int main(){n=read();k=read();cnt=0;rt[0]=++cnt;insert(rt[0],0,0);inc(i,1,n)a[i]=read(),rt[i]=++cnt,d[rt[i]]=d[rt[i-1]],insert(rt[i],a[i],i);inc(i,2,n){pair<int,int> t=querty(rt[0],rt[i-1],a[i]);que.push((Tmp){t.first,1,i-1,t.second,i});}pair<int,int> t1;for(int i=1;i<=k;i++){vec.pb((que.top()).key);Tmp t=que.top();que.pop();printf("%d ",t.key);if(t.pos>t.l)t1=querty(rt[t.l-1],rt[t.pos-1],a[t.aim]),que.push((Tmp){t1.first,t.l,t.pos-1,t1.second,t.aim});if(t.pos<t.r)t1=querty(rt[t.pos],rt[t.r],a[t.aim]),que.push((Tmp){t1.first,t.pos+1,t.r,t1.second,t.aim});}
}
3689: 异或之
Time Limit: 10 Sec Memory Limit: 256 MB
Submit: 550 Solved: 269
[Submit][Status][Discuss]
Description
给定n个非负整数A[1], A[2], ……, A[n]。
对于每对(i, j)满足1 <= i < j <= n,得到一个新的数A[i] xor A[j],这样共有n*(n-1)/2个新的数。求这些数(不包含A[i])中前k小的数。
注:xor对应于pascal中的“xor”,C++中的“^”。
Input
第一行2个正整数 n,k,如题所述。
以下n行,每行一个非负整数表示A[i]。
Output
共一行k个数,表示前k小的数。
Sample Input
1
1
3
4
Sample Output
HINT
【样例解释】
1 xor 1 = 0 (A[1] xor A[2])
1 xor 3 = 2 (A[1] xor A[3])
1 xor 4 = 5 (A[1] xor A[4])
1 xor 3 = 2 (A[2] xor A[3])
1 xor 4 = 5 (A[2] xor A[4])
3 xor 4 = 7 (A[3] xor A[4])
前5小的数:0 2 2 5 5
【数据范围】
对于100%的数据,2 <= n <= 100000; 1 <= k <= min{250000, n*(n-1)/2};
0 <= A[i] < 2^31
转载于:https://www.cnblogs.com/wang9897/p/9723096.html
BZOJ3689: 异或之相关推荐
- [您有新的未分配科技点]可,可,可持久化!?------0-1Trie和可持久化Trie普及版讲解...
这一次,我们来了解普通Trie树的变种:0-1Trie以及在其基础上产生的可持久化Trie(其实,普通的Trie也可以可持久化,只是不太常见) 先简单介绍一下0-1Trie:一个0-1Trie节点只有 ...
- 不占用多余空间实现值的交换——异或运算
首先什么是异或运算? ^规则: 0 ^ x = x x ^ x = 0 那么 a 与 b 交换值如何做呢???三行代码
- 左神讲算法——异或的高级操作(两数交换+经典面试题)
目录 1. 异或的性质 2. 两数交换 3. 经典面试例题 参考链接:2021最新左神数据结构算法全家桶 1. 异或的性质 异或可以看成相同为1,不同为0:也可以看作无进位相加,有奇数个1则结果为1, ...
- 《The Sixth Sense》(《灵异第六感》)观后
记得在学校的时候看过一部片子<左眼看到鬼>,现在想想那部片子有抄袭<Tht Sixth Sense>的嫌疑.不过抄袭也差得远. 现在真的懒得看港台片了,国内的农村,山村题材的都 ...
- 计算机入门新人必学,异世修真人怎么玩?新手快速入门必备技巧
异世修真人怎么快速入门?最近新出来的一款文字修仙游戏,很多萌新不知道怎么玩?进小编给大家带来了游戏新手快速入门技巧攻略,希望可以帮到大家. 新手快速入门攻略 1.开局出来往下找婆婆,交互给点钱,旁边有 ...
- java 异或_Java之超级基础且实用的知识点
1月20日 今天是小编的寒假的第一天!忙碌家里的事忙了一上午~下午困着但是不学习会心里难受.(毕竟是立下了寒假Flag的人)然后就打开了电脑,我发现我这个人,生活中不洁癖,但学习上还是有点洁癖的,这不 ...
- 136. 只出现一次的数字(关于异或的使用)
136. 只出现一次的数字 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现 ...
- 【bzoj3261】最大异或和 可持久化Trie树
题目描述 给定一个非负整数序列 {a},初始长度为 N. 有M个操作,有以下两种操作类型: 1.A x:添加操作,表示在序列末尾添加一个数 x,序列的长度 N+1. 2.Q l r x: ...
- 【GDKOI2016Day1T1-魔卡少女】【拆位】线段树维护区间内所有连续子区间的异或和...
题意:给出N个数,M个操作.操作有修改和询问两种,每次修改将一个数改成另一个数,每次询问一个区间的所有连续子区间的异或和.n,m<=100000,ai<=1000 题解: 当年(其实也就是 ...
- oracle rman异机恢复
Oracle源主机 Oracle目标主机 主机平台 CentOS6.2(final) CentOs6.2(FInal) 主机名 vick rman IP地址 192.168.1.11 192.16 ...
最新文章
- centos7下安装intel Media Server Studio记录
- Ubuntu 16.04重启输入法
- python3 使用 socket.gethostbyname 报错 getaddrinfo failed 解决方法
- Java之IO流学习总结【上】
- KubeVela 成为 CNCF 沙箱项目,让云端应用交付更加简单
- python 港股交易数据_GitHub - 116pythonZS/futuquant: 富途量化平台 API
- Gazebo仿真平台
- antd 使用upload 组件,使用自定义上传行为,覆盖默认action 访问请求
- Setup Factory 安装程序的图标
- ajax 的data,ajax请求的data数据格式
- html图片滚动红点_程序员最爱的小红点更新了!史上最薄的钛制ThinkPad发布
- 汉诺塔游戏程序可以通过“递归”来实现?但你未必清楚其根本原因。
- 千博日志索引,收录了带头大哥、laok、王国强、严为民等人的博客
- Thymeleaf 教程
- 极速加密文件夹: 一个2秒加密文件夹的Windows文件夹加密软件
- 时间搓转换剩余时间 php
- 微信测试睡眠的软件,微信小睡眠小程序使用方法
- Font Awesome 的使用
- android 系统自带的软件可以删除列表--Defy
- linux中的 inode 详解