【权值分块】bzoj3685 普通van Emde Boas树
权值分块,虽然渐进复杂度不忍直视,但其极小的常数使得实际运行起来比平衡树快,大多数情况和递归版权值线段树差不多,有时甚至更快。但是被zkw线段树完虐。
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
#define N 1000001
int maxv,minv=;
int n,op,a,m,ma[N],en,l[],r[],sumv[],sz,sum,num[N];
bool b[N];
void makeblock()
{
sz=sqrt(n); if(!sz) sz=; r[]=-;
for(sum=;sum*sz<n-;sum++)
{
l[sum]=r[sum-]+;
r[sum]=sz*sum-;
for(int i=l[sum];i<=r[sum];i++) num[i]=sum;
}
l[sum]=r[sum-]+;
r[sum]=n-;
for(int i=l[sum];i<=r[sum];i++) num[i]=sum;
}
inline void Insert(const int &x){if(b[x]) return; b[x]=; sumv[num[x]]++;}
inline void Delete(const int &x){if(!b[x]) return; b[x]=; sumv[num[x]]--;}
inline int Next(const int &x)
{
for(int i=x+;i<=r[num[x]];i++) if(b[i]) return i;
for(int i=num[x]+;i<=sum;i++) if(sumv[i])
for(int j=l[i];j<=r[i];j++)
if(b[j]) return j;
return -;
}
inline int Pre(const int &x)
{
for(int i=x-;i>=l[num[x]];i--) if(b[i]) return i;
for(int i=num[x]-;i>=;i--) if(sumv[i])
for(int j=r[i];j>=l[i];j--)
if(b[j]) return j;
return -;
}
inline int Min()
{
for(int i=;i<=sum;i++) if(sumv[i])
for(int j=l[i];j<=r[i];j++) if(b[j]) return j;
return -;
}
inline int Max()
{
for(int i=sum;i>=;i--) if(sumv[i])
for(int j=r[i];j>=l[i];j--) if(b[j]) return j;
return -;
}
int main()
{
scanf("%d%d",&n,&m);
makeblock();
for(int i=;i<=m;i++)
{
scanf("%d",&op); if(op!=&&op!=) scanf("%d",&a);
if(op==) Insert(a);
else if(op==) Delete(a);
else if(op==) printf("%d\n",Min());
else if(op==) printf("%d\n",Max());
else if(op==) printf("%d\n",Pre(a));
else if(op==) printf("%d\n",Next(a));
else printf("%d\n",b[a] ? : -);
}
return ;
}
【权值分块】bzoj3685 普通van Emde Boas树的更多相关文章
- bzoj3685普通van Emde Boas树 线段树
3685: 普通van Emde Boas树 Time Limit: 9 Sec Memory Limit: 128 MBSubmit: 1932 Solved: 626[Submit][Stat ...
- BZOJ3685: 普通van Emde Boas树
显然这题的所有操作都可以用set,但是直接用set肯定要T,考虑到读入量较大,使用fread读入优化,就可以卡过去了. #include<bits/stdc++.h> using name ...
- BZOJ_3685_普通van Emde Boas树_权值线段树
BZOJ_3685_普通van Emde Boas树_权值线段树 Description 设计数据结构支持: 1 x 若x不存在,插入x 2 x 若x存在,删除x 3 输出当前最小值,若不存 ...
- 【bzoj3685】普通van Emde Boas树 线段树
普通van Emde Boas树 Time Limit: 9 Sec Memory Limit: 128 MBSubmit: 1969 Solved: 639[Submit][Status][Di ...
- BZOJ 3685: 普通van Emde Boas树( 线段树 )
建颗权值线段树就行了...连离散化都不用... 没加读入优化就TLE, 加了就A掉了...而且还快了接近1/4.... ---------------------------------------- ...
- bzoj 3685: 普通van Emde Boas树
3685: 普通van Emde Boas树 Description 设计数据结构支持:1 x 若x不存在,插入x2 x 若x存在,删除x3 输出当前最小值,若不存在输出-14 输出当 ...
- 算法导论笔记——第二十章 van Emde Boas树
当关键字是有界范围内的整数时,能够规避Ω(lglgn)下界的限制,那么在类似的场景下,我们应弄清楚o(lgn)时间内是否可以完成优先队列的每个操作.在本章中,我们将看到:van Emde Boas树支 ...
- 浅谈 van Emde Boas 树——从 u 到 log log u 的蜕变
本文参考算法导论完成. 模板题在此 QwQ 优化的过程比较长,还请读者耐心阅读,认真理解. 最初的想法 我会暴力! 用一个 \(size\) 数组维护每个元素出现的次数. 不细讲,时间复杂度 \(O( ...
- 【BZOJ3685】【zkw权值线段树】普通van Emde Boas树
原题传送门 因为马上要开始搞树套树了,所以学了一波权值线段树...毕竟是会点zkw线段树的,所以zkw线段树大法好! 解题思路: 介绍一下权值线段树吧,其实感觉就是线段树的本义,就是你用线段树维护了数 ...
随机推荐
- SICAU-OJ: 第k小
第k小 题意: 给出一个长度不超过5000的字符串,然后让你找出第K小的字串(1<=K<=5).重复的串大小相等. 题解: 这里我们知道某些串的前缀是肯定小于等于其本身的. 那么长度为5的 ...
- CentOS 6.4安装配置ldap
CentOS 6.5安装配置ldap 时间:2015-07-14 00:54来源:blog.51cto.com 作者:"ly36843运维" 博客 举报 点击:274次 一.安装l ...
- Hadoop之yarn调用机制
1,Mapper方法:如果在map方法之前执行一些程序用setup,之后用cleanup.同理在Reducer方法中也有setup和cleanup. 2,map任务是并行执行,没有谁先谁后,如果是两个 ...
- bzoj4900 [CTSC2017]密钥
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4900 [题解] 恭喜bzoj达到40页 考场由于傻逼基数排序写挂了而gg. 竟然忘了考试前一 ...
- 关于k Line Chart (k线图)
K Line Chart python实现k线图的代码,之前找过matplotlib中文文档但是画k线图的finance方法已经弃用了.所以自己在网上搜寻一下加上改编,很好的实现出k线图, 代码如下: ...
- bzoj 1192 二进制
原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1192 继续刷水题,二进制思想 //By BLADEVIL var x :longint; ...
- setInterval的使用和停用
var res = self.setInterval(function(){ if(typeof(UE.getEditor('editor').body.innerHTML) != "und ...
- Perl的Expect模块学习
Perl的Expect模块学习 http://www.xuebuyuan.com/1852717.html
- 【LA3461】Leonardo的笔记本
白书例题. #include<bits/stdc++.h> using namespace std; ],vis[],cnt[]; inline int read(){ ,x=;char ...
- 【bzoj2561】最小生成树
嗯……这题是一个网络流. 加入的边为u,v长度L 则所有长度大于L的边不能使得u,v连通 求个最小割即可.小于同理 两次最小割结果相加. #include<bits/stdc++.h> # ...