HDU6040 Hints of sd0061
题目链接:https://vjudge.net/problem/HDU-6040
题目大意:
给出 \(n\) 个数,有 \(m\) 次询问,每次询问这 \(n\) 个数中第 \(k+1\) 大的数是什么。
另有附加限制:对于 \(n\) 个数中的任意三个数 \(a,b,c\),如果满足 \(a \not= b, a < c, b < c\),则有 \(a + b \le c\).
\((1 \le n \le 10^{7}, 1 \le m \le 100)\)
解题思路:
由附加限制不难联想到斐波那契数列,由于 \(F(36) = 14930352\),所以我们不难推测将这 \(m\) 次询问中去重后剩下的不同询问的个数是少于 \(36\) 的。
在此,还要再介绍一个优秀的函数:nth_element. 其用法是:nth_element\((first, nth, last, compare)\);作用是:将第 \(n\) 大的元素放在位置 \(n\)(从0开始),处理完之后,默认排在它前面的元素都不比它大,排在它后面的元素都不比它小。如果有定义 \(compare()\) 函数的话,大小关系则由 \(compare()\) 定义。时间复杂度是 \(O(n)\).
于是,一种优秀的做法是:将 \(m\) 个询问排序,去重,然后从大往小处理询问,用 nth_element() 求出区间第 \(k\) 大的数,并且将排在第 \(k\) 大的数后面的数都丢掉。
最后,这是第 \(1000\) 题。悄悄地,为自己鼓个掌 \(XD\)
AC代码:
#include <bits/stdc++.h> using namespace std;
typedef long long LL;
const LL MOD=1e9+;
const int MAXN=1e7+;
const int LIM=1e6; unsigned x,y,z;
unsigned rng61() {
unsigned t;
x ^= x << ;
x ^= x >> ;
x ^= x << ;
t = x;
x = y;
y = z;
z = t ^ x ^ y;
return z;
}
int add,n;
unsigned a[MAXN],ta[MAXN];
struct ask{
int ind,pos;
}b[];
bool cmp(const ask &x,const ask &y){
return x.ind<y.ind;
}
unsigned ans[]; int main(){
// freopen("in.txt","r",stdin);
int m,kase=;
unsigned A,B,C;
while(scanf("%d%d%u%u%u",&n,&m,&A,&B,&C)==){
add=;
x=A,y=B,z=C;
for(int i=;i<n;i++)
a[i]=rng61();
for(int i=;i<m;i++){
scanf("%d",&b[i].ind);
b[i].pos=i;
}
sort(b,b+m,cmp);
b[m].pos=m,b[m].ind=n; for(int i=m-;i>=;i--){
if(b[i].ind==b[i+].ind)
ans[b[i].pos]=ans[b[i+].pos];
else{
nth_element(a,a+b[i].ind,a+b[i+].ind);
ans[b[i].pos]=a[b[i].ind];
}
}
printf("Case #%d:",kase++);
for(int i=;i<m;i++) printf(" %u",ans[i]);
printf("\n");
}
return ;
}
HDU6040 Hints of sd0061的更多相关文章
- 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 ...
- Hints of sd0061(快排思想)
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 Contest 1
/* HDU 6040 - Hints of sd0061 [ 第k小数查询,剪枝 ] 题意: 给出随机数列 a[N] (N < 1e7) 询问 b[M] (M < 100) ,对于每个询 ...
- 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(划分高低位查找)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6040 [题目大意] 给出一个随机数生成器,有m个询问,问第bi小的元素是啥 询问中对于bi< ...
- HDU 6040 Hints of sd0061(nth_element)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6040 [题目大意] 给出一个随机数生成器,有m个询问,问第bi小的元素是啥 询问中对于bi< ...
- 随机生成数组函数+nth-element函数
这几天做了几道随机生成数组的题,且需要用nth-elemeng函数,并且都是北航出的多校题…… 首先我们先贴一下随机生成数组函数的代码: unsigned x = A, y = B, z = C; u ...
- HDU 6040 stl
Hints of sd0061 Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others ...
随机推荐
- Spring5参考指南:Environment
文章目录 Profiles PropertySource 使用@PropertySource Spring的Environment接口有两个关键的作用:1. Profile, 2.properties ...
- js 函数的多图片预加载(preload) 带插件版完整解析
前言: 本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽. 本篇文章为您分析一下原生JS实现图片预加载效果 本篇文章写的 ...
- require.context的妙用
比较好用,记录下来. 以下方法将获取vuex中Modules文件夹里的所有modules并导出. const files = require.context(".", false, ...
- Apache Storm 官方文档 —— Storm 与 Kestrel
本文说明了如何使用 Storm 从 Kestrel 集群中消费数据. 前言 Storm 本教程中使用了 storm-kestrel 项目和 storm-starter 项目中的例子.建议读者将这几个项 ...
- 解决Visual Studio (VS) 插件下载缓慢
1.关闭IPV6协议 因为如果都支持IPV6协议,会自动使用IPV6下载扩展. 因为IPV6还没有建立完善,所以可能会比较慢. 百度经验:怎样关闭IPV6协议 2.给IPV6添加DNS 百度: 240 ...
- Codeforces Round #509 (Div. 2) A. Heist 贪心
There was an electronic store heist last night. All keyboards which were in the store yesterday were ...
- 图论--最短路--dijkstra(含路径输出)模板
#include<iostream> #include<stack> #include<queue> #include<cstring> #includ ...
- [USACO1.5]回文质数 Prime Palindromes
题目描述 因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数. 写一个程序来找出范围[a,b](5 <= a < b <= 100,000 ...
- CentOS启用iptables防火墙
centos 7默认的防火墙使用firewall,系统服务管理方式也变更了,可以通过systemctl命令控制. 可以参考这个链接 但是习惯用iptables,可以按下面的操作改下 1.关闭firew ...
- docker部署gitlab
Docker部署gitlab 一.前提条件 (1) 存在docker (2) 服务器可以联网(外网) (3) 服务器内存至少4G(内存不够会出现502错误) 内存不足502错误 ...