3685: 普通van Emde Boas树

Time Limit: 9 Sec  Memory Limit: 128 MB
Submit: 1932  Solved: 626
[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

常规操作
要用zkw减小常数,但我貌似卡过了

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#define ls u<<1
#define rs ls|1
#define ll long long
#define N 1000050
using namespace std;
int n,m,sum[N<<2],vis[N];
void pushup(int u){sum[u]=sum[ls]+sum[rs];}
int findpos(int u,int l,int r,int x){
if(!sum[u])return 0;
if(l==r)return sum[u];
int mid=l+r>>1;
if(x<=mid)return findpos(ls,l,mid,x);
return findpos(rs,mid+1,r,x)+sum[ls];
}
void update(int u,int L,int R,int p,int val){
if(L==R){
sum[u]=val;
return;
}
int mid=L+R>>1;
if(p<=mid)update(ls,L,mid,p,val);
else update(rs,mid+1,R,p,val);
pushup(u);
}
int query(int u,int l,int r,int p){
if(l==r)return l;
int mid=l+r>>1;
if(p<=sum[ls])return query(ls,l,mid,p);
return query(rs,mid+1,r,p-sum[ls]);
}
int main(){
scanf("%d%d",&n,&m);
int op,x;
while(m--){
scanf("%d",&op);
if(op!=3&&op!=4)scanf("%d",&x);
if(op==1)update(1,0,n-1,x,1),vis[x]=1;
if(op==2)update(1,0,n-1,x,0),vis[x]=0;
if(op==3){
if(sum[1]==0)puts("-1");
else printf("%d\n",query(1,0,n-1,1));
}
if(op==4){
if(sum[1]==0)puts("-1");
else printf("%d\n",query(1,0,n-1,sum[1]));
}
if(op==5){
int p=findpos(1,0,n-1,x);
if(vis[x])p--;
if(p<=0)puts("-1");
else printf("%d\n",query(1,0,n-1,p));
}
if(op==6){
int p=findpos(1,0,n-1,x);p++;
if(p>sum[1])puts("-1");
else printf("%d\n",query(1,0,n-1,p));
}
if(op==7){
if(vis[x])puts("1");
else puts("-1");
}
}
return 0;
}

bzoj3685普通van Emde Boas树 线段树的更多相关文章

  1. 【权值分块】bzoj3685 普通van Emde Boas树

    权值分块,虽然渐进复杂度不忍直视,但其极小的常数使得实际运行起来比平衡树快,大多数情况和递归版权值线段树差不多,有时甚至更快.但是被zkw线段树完虐. #include<cstdio> # ...

  2. BZOJ3685: 普通van Emde Boas树

    显然这题的所有操作都可以用set,但是直接用set肯定要T,考虑到读入量较大,使用fread读入优化,就可以卡过去了. #include<bits/stdc++.h> using name ...

  3. 【bzoj3685】普通van Emde Boas树 线段树

    普通van Emde Boas树 Time Limit: 9 Sec  Memory Limit: 128 MBSubmit: 1969  Solved: 639[Submit][Status][Di ...

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

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

  5. BZOJ_3685_普通van Emde Boas树_权值线段树

    BZOJ_3685_普通van Emde Boas树_权值线段树 Description 设计数据结构支持: 1 x  若x不存在,插入x 2 x  若x存在,删除x 3    输出当前最小值,若不存 ...

  6. bzoj 3685: 普通van Emde Boas树

    3685: 普通van Emde Boas树 Description 设计数据结构支持:1 x  若x不存在,插入x2 x  若x存在,删除x3    输出当前最小值,若不存在输出-14    输出当 ...

  7. 浅谈 van Emde Boas 树——从 u 到 log log u 的蜕变

    本文参考算法导论完成. 模板题在此 QwQ 优化的过程比较长,还请读者耐心阅读,认真理解. 最初的想法 我会暴力! 用一个 \(size\) 数组维护每个元素出现的次数. 不细讲,时间复杂度 \(O( ...

  8. 算法导论笔记——第二十章 van Emde Boas树

    当关键字是有界范围内的整数时,能够规避Ω(lglgn)下界的限制,那么在类似的场景下,我们应弄清楚o(lgn)时间内是否可以完成优先队列的每个操作.在本章中,我们将看到:van Emde Boas树支 ...

  9. Van Emde Boas Tree

    van Emde Boas trees 支持所有优先级优先级队列的操作,并且巧妙的是它对于SEARCH, INSERT,DELETE,MINIMUM,MAXMUN,SUCCESSOR,和PREDECE ...

随机推荐

  1. 流程控制语句(MySQL/MariaDB )

    本文目录:1.BEGIN...END2.true和false3.if结构4.case结构5.loop.leave和iterate6.repeat循环7.while循环 MySQL/MariaDB中的符 ...

  2. docker实践3

    我的docker学习笔记3   $docker run ubuntu echo'hello world' $docker run -i -t ubuntu /bin/bash #ps -ef #exi ...

  3. 2018 6年iOS开发常用的三方库

    开发一般APP必备三方库,省力秘籍!!!本篇文章会经常更新最新常用的三方. 1.网络请求库 AFNetworking https://github.com/AFNetworking/AFNetwork ...

  4. Git Bash

    Git Bash是Git的命令行工具,可以执行Git的所有命令,但是当我们想把一个URL粘贴到Git Blash时,Ctrl+V或者右键粘贴不起作用了 方法1-使用快捷键"Insert&qu ...

  5. EF CodeFirst方式 Fluent Api配置

    一.One-to-One Relationship[一对一关系] 两个表之间,只能由一个记录在另外一个表中.每一个主键的值,只能关联到另外一张表的一条或者零条记录.请记住,这个一对一的关系不是非常的普 ...

  6. C++ namespace的作用

    namespace:命名空间或者叫名字空间,传统的c++只有一个全局的namespace,但是由于现在的程序规模越来越大,程序的分工越来越细,全局作用域就变得越来越拥挤,每个人都可能使用相同的名字来实 ...

  7. 学习React系列(十)——Render Props

    解决问题:将行为封装,供多个组件使用(在多个组件之间分享某段代码) 组件中的props属性中包含一个"render"属性(该属性为一个返回值为元素的方法),然后在该组件的rende ...

  8. [LeetCode] Delete and Earn 删除与赚取

    Given an array nums of integers, you can perform operations on the array. In each operation, you pic ...

  9. position的static、relative、absolute、fixed、inherit

    网上有很多关于position的讲解,也有很多他们属性之间的比较,但是比较全面的讲解还是比较少,每次看完过段时间就忘了,所以今天参考了很多网上现有的资源,自己整理一下,写下这篇文章. position ...

  10. python的字符串

    首先,字符串是python内置的数据类型,其特点是用引号引起来,并且可以是使用单引号('字符串'),双引号("字符串"),三个引号('''字符串''' 和""& ...