HDU 6040 Hints of sd0061(划分高低位查找)
【题目链接】 http://acm.hdu.edu.cn/showproblem.php?pid=6040
【题目大意】
给出一个随机数生成器,有m个询问,问第bi小的元素是啥
询问中对于bi<bk,bj<bk,有bi+bj<=bk
【题解】
(By Claris)对于所有的数字,我们将其按照高位分类,统计每个高16位有几个数字,
然后定位每个询问的高16位是什么,因为只有100个高16位是被询问到的,
把这100个高16位的数放入桶里,每次暴力查找,因为数据随机,
因此每个高16位期望n/65536=153个数,一共只有15300个数字有用
【代码】
#include <cstdio>
#include <algorithm>
using namespace std;
int T,n,m,k[200],pos[200];
unsigned s[10000010],b[10000010],x,y,z;
unsigned q[65536],cnt[65536],u[65536],tot[65536];
unsigned xorshf96(){
unsigned t;
x^=x<<16;
x^=x>>5;
x^=x<<1;
t=x; x=y; y=z;
z=t^x^y;
return z;
}
int getpos(int x){for(int i=0;;i++)if(tot[i]>=x)return i;}
unsigned query(int k,int p){
int i=p?tot[p-1]:0,m=0;
for(k-=++i;i<=tot[p];i++)q[m++]=b[i];
nth_element(q,q+k,q+m);
return q[k];
}
int Cas=1;
int main(){
while(~scanf("%d%d%u%u%u",&n,&m,&x,&y,&z)){
for(int i=0;i<65536;i++)cnt[i]=u[i]=0;
for(int i=1;i<=n;i++){s[i]=xorshf96();cnt[s[i]>>16]++;}
for(int i=1;i<65536;i++)cnt[i]+=cnt[i-1];
for(int i=0;i<65535;i++)tot[i]=cnt[i];
for(int i=1;i<=m;i++){
scanf("%d",&k[i]);
pos[i]=getpos(++k[i]);
u[pos[i]]=1;
}for(int i=1;i<=n;i++)if(u[s[i]>>16])b[cnt[s[i]>>16]--]=s[i];
printf("Case #%d:",Cas++);
for(int i=1;i<=m;i++)printf(" %u",query(k[i],pos[i]));
puts("");
}return 0;
}
HDU 6040 Hints of sd0061(划分高低位查找)的更多相关文章
- HDU 6040 - Hints of sd0061 | 2017 Multi-University Training Contest 1
/* HDU 6040 - Hints of sd0061 [ 第k小数查询,剪枝 ] 题意: 给出随机数列 a[N] (N < 1e7) 询问 b[M] (M < 100) ,对于每个询 ...
- hdu 6040 Hints of sd0061(stl: nth_element(arr,arr+k,arr+n))
Hints of sd0061 Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others ...
- HDU 6040 Hints of sd0061 nth_element函数
Hints of sd0061 Problem Description sd0061, the legend of Beihang University ACM-ICPC Team, retired ...
- HDU 6040 Hints of sd0061 —— 2017 Multi-University Training 1
Hints of sd0061 Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others ...
- HDU 6040 Hints of sd0061(nth_element)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6040 [题目大意] 给出一个随机数生成器,有m个询问,问第bi小的元素是啥 询问中对于bi< ...
- 字节的高低位知识,Ascii,GB2312,UNICODE等编码的关系与来历
很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的,于是他们把这称为"字节". 再后来,他们又做了一些可以处理 ...
- Dollar Dayz(大数母函数,高低位存取)
Dollar Dayz Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5655 Accepted: 2125 Descr ...
- .net下简单快捷的数值高低位切换
.net下简单快捷的数值高低位切换 做网络通讯中数值传输是很普遍的事情,但数值的存储在不平台和硬件上存储方式都不一样,主要有两大类分别是高位和低位存储:而.net平台下是低位存储,通过.net提供的函 ...
- C语言如何分离一个数的高低位,如何将2个字节变成一个字节
关于这个概念,是我从工作中学习的,虽然在读书的时候就应该要掌握,但是在开发中,这项技能尤其重要.我是做嵌入式开发的,在嵌入式开发过程中,如何对数据操作必然是不可缺少的问题,接下来,我们来看一个例子: ...
随机推荐
- Windows下基于python3使用word2vec训练中文维基百科语料(三)
对前两篇获取到的词向量模型进行使用: 代码如下: import gensim model = gensim.models.Word2Vec.load('wiki.zh.text.model') fla ...
- perl6中函数参数(2)
use v6; #如果参数是可选的, 可以在后面加个?后定义 sub Choo($x, $y?){ say $x+$y; } Choo(); Choo(,); #具名参数, 也就是字典形式的调用 su ...
- linux下实现在程序运行时的函数替换(热补丁)【转】
转自:http://www.cnblogs.com/leo0000/p/5632642.html 声明:以下的代码成果,是参考了网上的injso技术,在本文的最后会给出地址,同时非常感谢injso技术 ...
- 安全测试===sqlmap(叁)转载
十五.操作系统控制 1.执行任意操作系统命令 参数:--os-cmd和--os-shell 若数据库管理系统是MySQL.PostgreSQL或微软的SQL Server且当前用户有相关权限Sqlma ...
- 定制LFS镜像及安装过程
定制LFS镜像及安装过程 http://blog.csdn.net/decload/article/details/7407698 一.定制LFS镜像 定制LFS镜像的思想是在已构建完成 ...
- core dump使用方法、设置、测试用例
core dump使用方法.设置.测试用例 http://blog.csdn.net/liuzhuchen/article/details/21975227
- oracle to_char 返回毫秒级
select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ssxff') time1, 关键在 systimestamp
- JAVA常见的集合类
关系的介绍: Set(集):集合中的元素不按特定方式排序,并且没有重复对象.他的有些实现类能对集合中的对象按特定方式排序. List(列表):集合中的元素按索引位置排序,可以有重复对象,允许按照对象在 ...
- 实验室项目.md
1 嵌入式操作系统 为什么要用嵌入式操作系统 普通的单片机编程:程序(软件)--单片机硬件: 嵌入式操作系统开发:程序(软件)--操作系统--嵌入式硬件(包括单片机等); 我们平时普通所学的单片机编程 ...
- tornado 模版继承 函数和类的调用
模版继承.函数和类的调用 目录结构 lesson5.py # -*- coding:utf-8 -*- import tornado.web import tornado.httpserver imp ...