3685: 普通van Emde Boas树

Time Limit: 9 Sec Memory Limit: 128 MB
Submit: 1758 Solved: 563
[Submit][Status][Discuss]
Description

设计数据结构支持:
1 x 若x不存在,插入x
2 x 若x存在,删除x
3 输出当前最小值,若不存在输出-1
4 输出当前最大值,若不存在输出-1
5 x 输出x的前驱,若不存在输出-1
6 x 输出x的后继,若不存在输出-1
7 x 若x存在,输出1,否则输出-1

Input

第一行给出n,m 表示出现数的范围和操作个数
接下来m行给出操作
n<=10^6,m<=2*10^6,0<=x< n

Output

Sample Input

10 11

1 1

1 2

1 3

7 1

7 4

2 1

3

2 3

4

5 3

6 2

Sample Output

1

-1

2

2

2

-1

HINT

Source

By Zky


【分析】

TLE的垃圾权值线段树。
空间本身就开不够,我还试水
又该自己挖下个坑233。


【代码】

//bzoj 3685 普通van Emde Boas树
#include<bits/stdc++.h>
#define inf 1e9+7
#define ll long long
#define M(a) memset(a,0,sizeof a)
#define fo(i,j,k) for(i=j;i<=k;i++)
using namespace std;
const int mxn=1000005;
const int M=6000005;
bool vis[M];
int n,m,rt,tot;
int ls[M],rs[M],mx[M],mn[M];
inline int read()
{int x=0;char ch=getchar();while(ch<'0' || ch>'9') ch=getchar();while(ch>='0' && ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();return x;
}
inline void update(int x)
{vis[x]=vis[ls[x]]|vis[rs[x]];mx[x]=max(mx[ls[x]],mx[rs[x]]);mn[x]=min(mn[ls[x]],mn[rs[x]]);
}
inline void ins(int &x,int l,int r,int v)
{if(!x) x=(++tot);if(l==r){mx[x]=mn[x]=v;vis[x]=1;return;}int mid=l+r>>1;if(v<=mid) ins(ls[x],l,mid,v);else ins(rs[x],mid+1,r,v);update(x);
}
inline void del(int x,int l,int r,int v)
{if(!x) return;if(l==r){mx[x]=-1,mn[x]=inf;vis[x]=0;return;}int mid=l+r>>1;if(v<=mid) del(ls[x],l,mid,v);else del(rs[x],mid+1,r,v);update(x);
}
inline int rig(int x,int l,int r,int L,int R)
{if(!x || L>R) return -1;if(l==r && vis[x]) return l;int mid=l+r>>1;if(R<=mid) return rig(ls[x],l,mid,L,R);else if(L>mid) return rig(rs[x],mid+1,r,L,R);else{int tmp=rig(rs[x],mid+1,r,mid+1,R);if(tmp!=-1) return tmp;return rig(ls[x],l,mid,L,mid);}
}
inline int lef(int x,int l,int r,int L,int R)
{if(!x || L>R) return -1;if(l==r && vis[x]) return l;int mid=l+r>>1;if(R<=mid) return lef(ls[x],l,mid,L,R);else if(L>mid) return lef(rs[x],mid+1,r,L,R);else{int tmp=lef(ls[x],l,mid,L,mid);if(tmp!=-1) return tmp;return lef(rs[x],mid+1,r,mid+1,R);}
}
inline int yes(int x,int l,int r,int v)
{if(!x) return -1;if(l==r){if(vis[x]) return 1;else return -1;}int mid=l+r>>1;if(v<=mid) return yes(ls[x],l,mid,v);else return yes(rs[x],mid+1,r,v);
}
int main()
{int i,j,opt;n=read(),m=read();memset(mx,-1,sizeof mx);memset(mn,0x3f,sizeof mn);while(m--){scanf("%d",&opt);switch(opt){case 1:ins(rt,0,n,read());break;case 2:del(rt,0,n,read());break;case 3:printf("%d\n",vis[rt]?mn[rt]:-1);break;case 4:printf("%d\n",vis[rt]?mx[rt]:-1);break;case 5:printf("%d\n",rig(rt,0,n,0,read()-1));break;case 6:printf("%d\n",lef(rt,0,n,read()+1,n));break;case 7:printf("%d\n",yes(rt,0,n,read()));break;}}return 0;
}
/*
3
100000
1 0
1 2
3
4
5 0
5 2
6 0
6 2
7 2
7 0
*/

bzoj 3685 普通van Emde Boas树(坑)相关推荐

  1. BZOJ 3685: 普通van Emde Boas树( 线段树 )

    建颗权值线段树就行了...连离散化都不用... 没加读入优化就TLE, 加了就A掉了...而且还快了接近1/4.... ---------------------------------------- ...

  2. BZOJ 3685 普通van Emde Boas树 权值线段树(zkw)

    第一眼看到这题,没错就拿他来做treap的练手了,然而我错了,卡treap,我哭了,写了两三次treap(),这两天几乎都在写数据结构了.后来我又可耻地看了题解,原来这道题已经给了数列中数的范围,可以 ...

  3. BZOJ3685普通van Emde Boas树

    3685: 普通van Emde Boas树 Time Limit: 9 Sec Memory Limit: 128 MB Submit: 962 Solved: 319 Description 设计 ...

  4. bzoj3685普通van Emde Boas树 线段树

    3685: 普通van Emde Boas树 Time Limit: 9 Sec  Memory Limit: 128 MB Submit: 1932  Solved: 626 [Submit][St ...

  5. 算法导论读书笔记(20)van Emde Boas树

    第五部分 高级数据结构 第20章 van Emde Boas树 van Emde Boas树支持优先队列操作以及一些其他操作,每个操作最坏情况运行时间为O(lglgn).而这种数据结构限制关键字必须为 ...

  6. van Emde Boas 树 数据结构说解

    van Emde Boas 树的定义 直观上看,vEB 树保存了一个有序的集合,并支持以 O(lglgn) 的时间复杂度在 vEB 树上进行最小最大值查询.单值存在性查询.单值前驱后继查询.单值插入维 ...

  7. 算法导论-van Emde Boas树

    van Emde Boas树 van Emde Boas树中文名不知道,所以暂且叫它v树吧.v树是一种数据结构,和二叉树.红黑树类似.一种数据结构被创建出来,肯定有其特别的优点,v树的优点就是实现数据 ...

  8. 《算法导论3rd第二十章》van Emde Boas树

    前言 前面介绍的二叉堆,红黑树以及斐波那契堆,其重要的操作都要O(lgn).当特定条件下,能否够规避Ω(lglgn)下界的限制?在本章中,我们将看到:van Emde Boas树支持优先队列操作及一些 ...

  9. 【算法学习笔记】van Emde Boas树

    参考算法导论第20章 van Emde Boas树 文章目录 1. 基本方法 1.1 直接寻址 1.2 叠加的二叉树结构 `Superimposing a binary tree structure` ...

最新文章

  1. 暑期集训2:ACM基础算法 例2:POJ-2456
  2. 作为公司新上任的管理者,如何更好的规划工作方案
  3. python爬虫实例-Python爬虫原理与python爬虫实例大全
  4. 聊一聊转行推荐的问题
  5. isdigit函数python检测数字个数_Python中判断字符串是否为数字的三个方法isdecimal 、isdigit、isnumeric的差别...
  6. Windows下安装部署DBeaver连接clickhouse
  7. future.cancel不能关闭线程_彻底弄懂线程池-newFixedThreadPool实现线程池
  8. linux 安装rpm qt can't creat,CentOS 6.2部署Qt开发环境
  9. 2016年中国微信小程序专题研究报告
  10. 7.3 环境(Condition)
  11. POJ 2393 Yogurt factory
  12. 安装Adobe Reader 时报错:HRESULT:0x80070422
  13. x509证书cer格式转pem格式
  14. mysql stmt语法_PHP mysqli_stmt_get_result() 函数用法及示例
  15. linux cad 安装教程视频,Ubuntu18.04安装FreeCAD教程
  16. Thinkpad X61驱动下载及安装方法 for windows XP
  17. (原創) 如何將16進位的ACSII值轉成相對應的字元? (C/C++) (C)
  18. thingsboard物联网平台编译安装一步到位
  19. ldp hello报文接收的处理流程
  20. 前端动态生成横向树形表格

热门文章

  1. 金蝶云苍穹平台工作流相关常用方法
  2. ssm电影院购票系统、
  3. 【直播】杨毅远:集成学习答疑直播之六 -- 幸福感预测案例实战
  4. E. XOR Inverse(Trie贪心)
  5. 暴力破解与验证码安全之——验证码安全
  6. 纷享销客斩获“2022-2023年度用户推荐SaaS品牌”
  7. 5种暂停动画的方式,你都会?
  8. Effie、幕布、为知笔记、谁才是超好用的商业提案工具?
  9. 下载音乐并转码mp3
  10. CCTV网络电视BETA上线,采用FLEX技术.