bzoj 3685 普通van Emde Boas树(坑)
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树(坑)相关推荐
- BZOJ 3685: 普通van Emde Boas树( 线段树 )
建颗权值线段树就行了...连离散化都不用... 没加读入优化就TLE, 加了就A掉了...而且还快了接近1/4.... ---------------------------------------- ...
- BZOJ 3685 普通van Emde Boas树 权值线段树(zkw)
第一眼看到这题,没错就拿他来做treap的练手了,然而我错了,卡treap,我哭了,写了两三次treap(),这两天几乎都在写数据结构了.后来我又可耻地看了题解,原来这道题已经给了数列中数的范围,可以 ...
- BZOJ3685普通van Emde Boas树
3685: 普通van Emde Boas树 Time Limit: 9 Sec Memory Limit: 128 MB Submit: 962 Solved: 319 Description 设计 ...
- bzoj3685普通van Emde Boas树 线段树
3685: 普通van Emde Boas树 Time Limit: 9 Sec Memory Limit: 128 MB Submit: 1932 Solved: 626 [Submit][St ...
- 算法导论读书笔记(20)van Emde Boas树
第五部分 高级数据结构 第20章 van Emde Boas树 van Emde Boas树支持优先队列操作以及一些其他操作,每个操作最坏情况运行时间为O(lglgn).而这种数据结构限制关键字必须为 ...
- van Emde Boas 树 数据结构说解
van Emde Boas 树的定义 直观上看,vEB 树保存了一个有序的集合,并支持以 O(lglgn) 的时间复杂度在 vEB 树上进行最小最大值查询.单值存在性查询.单值前驱后继查询.单值插入维 ...
- 算法导论-van Emde Boas树
van Emde Boas树 van Emde Boas树中文名不知道,所以暂且叫它v树吧.v树是一种数据结构,和二叉树.红黑树类似.一种数据结构被创建出来,肯定有其特别的优点,v树的优点就是实现数据 ...
- 《算法导论3rd第二十章》van Emde Boas树
前言 前面介绍的二叉堆,红黑树以及斐波那契堆,其重要的操作都要O(lgn).当特定条件下,能否够规避Ω(lglgn)下界的限制?在本章中,我们将看到:van Emde Boas树支持优先队列操作及一些 ...
- 【算法学习笔记】van Emde Boas树
参考算法导论第20章 van Emde Boas树 文章目录 1. 基本方法 1.1 直接寻址 1.2 叠加的二叉树结构 `Superimposing a binary tree structure` ...
最新文章
- 暑期集训2:ACM基础算法 例2:POJ-2456
- 作为公司新上任的管理者,如何更好的规划工作方案
- python爬虫实例-Python爬虫原理与python爬虫实例大全
- 聊一聊转行推荐的问题
- isdigit函数python检测数字个数_Python中判断字符串是否为数字的三个方法isdecimal 、isdigit、isnumeric的差别...
- Windows下安装部署DBeaver连接clickhouse
- future.cancel不能关闭线程_彻底弄懂线程池-newFixedThreadPool实现线程池
- linux 安装rpm qt can't creat,CentOS 6.2部署Qt开发环境
- 2016年中国微信小程序专题研究报告
- 7.3 环境(Condition)
- POJ 2393 Yogurt factory
- 安装Adobe Reader 时报错:HRESULT:0x80070422
- x509证书cer格式转pem格式
- mysql stmt语法_PHP mysqli_stmt_get_result() 函数用法及示例
- linux cad 安装教程视频,Ubuntu18.04安装FreeCAD教程
- Thinkpad X61驱动下载及安装方法 for windows XP
- (原創) 如何將16進位的ACSII值轉成相對應的字元? (C/C++) (C)
- thingsboard物联网平台编译安装一步到位
- ldp hello报文接收的处理流程
- 前端动态生成横向树形表格