【权值线段树】bzoj3224 Tyvj 1728 普通平衡树
一个板子。
#include<cstdio>
#include<algorithm>
using namespace std;
#define N 100001
struct Data
{
int v,p;
}t[N];
bool cmp(const Data &a,const Data &b)
{
return a.v<b.v;
}
int T[N<<2],op[N],a[N],n,ma[N],e;
void Update(int p,int v,int rt,int l,int r)//插入删除
{
T[rt]+=v;
if(l==r) return;
int m=(l+r>>1);
if(p<=m) Update(p,v,rt<<1,l,m);
else Update(p,v,rt<<1|1,m+1,r);
}
int Kth(int K,int rt,int l,int r)//K小值
{
if(l==r) return l;
int m=(l+r>>1);
if(T[rt<<1]>=K) return Kth(K,rt<<1,l,m);
return Kth(K-T[rt<<1],rt<<1|1,m+1,r);
}
int Rank(int p,int rt,int l,int r)//排名
{
if(r<p) return T[rt];
int m=(l+r>>1),res=0;
res+=Rank(p,rt<<1,l,m);
if(m<p-1) res+=Rank(p,rt<<1|1,m+1,r);
return res;
}
int Findp(int rt,int l,int r)
{
if(l==r) return l;
int m=(l+r>>1);
if(T[rt<<1|1]) return Findp(rt<<1|1,m+1,r);
return Findp(rt<<1,l,m);
}
int Pre(int p,int rt,int l,int r)
{
if(r<p)
{
if(T[rt]) return Findp(rt,l,r);
return 0;
}
int m=(l+r>>1),Re;
if(m<p-1 && T[rt<<1|1] && (Re=Pre(p,rt<<1|1,m+1,r))) return Re;
return Pre(p,rt<<1,l,m);
}
int Findn(int rt,int l,int r)
{
if(l==r) return l;
int m=(l+r>>1);
if(T[rt<<1]) return Findn(rt<<1,l,m);
return Findn(rt<<1|1,m+1,r);
}
int Nex(int p,int rt,int l,int r)
{
if(p<l)
{
if(T[rt]) return Findn(rt,l,r);
return 0;
}
int m=(l+r>>1),Re;
if(p<m && T[rt<<1] && (Re=Nex(p,rt<<1,l,m))) return Re;
return Nex(p,rt<<1|1,m+1,r);
}
int main()
{
// freopen("bzoj3224.in","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
scanf("%d%d",&op[i],&t[i].v);
t[i].p=i;
}
sort(t+1,t+1+n,cmp);
ma[a[t[1].p]=++e]=t[1].v;
for(int i=2;i<=n;i++)
{
if(t[i].v!=t[i-1].v) ++e;
ma[a[t[i].p]=e]=t[i].v;
}
for(int i=1;i<=n;i++)
{
if(op[i]==1) Update(a[i],1,1,1,e);
else if(op[i]==2) Update(a[i],-1,1,1,e);
else if(op[i]==3) printf("%d\n",Rank(a[i],1,1,e)+1);
else if(op[i]==4) printf("%d\n",ma[Kth(ma[a[i]],1,1,e)]);
else if(op[i]==5) printf("%d\n",ma[Pre(a[i],1,1,e)]);
else printf("%d\n",ma[Nex(a[i],1,1,e)]);
}
return 0;
【权值线段树】bzoj3224 Tyvj 1728 普通平衡树的更多相关文章
- 【权值分块】bzoj3224 Tyvj 1728 普通平衡树
权值分块和权值线段树的思想一致,离散化之后可以代替平衡树的部分功能. 部分操作的时间复杂度: 插入 删除 全局排名 全局K大 前驱 后继 全局最值 按值域删除元素 O(1) O(1) O(sqrt(n ...
- 替罪羊树—BZOJ3224: Tyvj 1728 普通平衡树
冬令营被平衡树坑了之后,打算苦练一番数据结构(QAQ). 先是打了一下想学好久的替罪羊树. 替罪羊树实现方法很简单,就是在不满足平衡条件的时候暴力重构子树. 调试小结: 1.删除操作分两类情况:如果某 ...
- BZOJ_3224 Tyvj 1728 普通平衡树 【离散化+权值线段树】
一 题面 Tyvj 1728 普通平衡树 二 分析 比较明显是可以用平衡二叉搜索树(splay)做的. 用权值线段树做,前提就是要先离散化,因为权值线段树维护的值域信息. 板子. 三 AC代码 #in ...
- cogs 1829. [Tyvj 1728]普通平衡树 权值线段树
1829. [Tyvj 1728]普通平衡树 ★★★ 输入文件:phs.in 输出文件:phs.out 简单对比时间限制:1 s 内存限制:1000 MB [题目描述] 您需要写一种数 ...
- 【树状数组套权值线段树】bzoj1901 Zju2112 Dynamic Rankings
谁再管这玩意叫树状数组套主席树我跟谁急 明明就是树状数组的每个结点维护一棵动态开结点的权值线段树而已 好吧,其实只有一个指针,指向该结点的权值线段树的当前结点 每次查询之前,要让指针指向根结点 不同结 ...
- 【BZOJ-2892&1171】强袭作战&大sz的游戏 权值线段树+单调队列+标记永久化+DP
2892: 强袭作战 Time Limit: 50 Sec Memory Limit: 512 MBSubmit: 45 Solved: 30[Submit][Status][Discuss] D ...
- BZOJ 3110 ZJOI 2013 K大数查询 树套树(权值线段树套区间线段树)
题目大意:有一些位置.这些位置上能够放若干个数字. 如今有两种操作. 1.在区间l到r上加入一个数字x 2.求出l到r上的第k大的数字是什么 思路:这样的题一看就是树套树,关键是怎么套,怎么写.(话说 ...
- 动态求区间K大值(权值线段树)
我们知道我们可以通过主席树来维护静态区间第K大值.我们又知道主席树满足可加性,所以我们可以用树状数组来维护主席树,树状数组的每一个节点都可以开一颗主席树,然后一起做. 我们注意到树状数组的每一棵树都和 ...
- 线段树(单标记+离散化+扫描线+双标记)+zkw线段树+权值线段树+主席树及一些例题
“队列进出图上的方向 线段树区间修改求出总量 可持久留下的迹象 我们 俯身欣赏” ----<膜你抄> 线段树很早就会写了,但一直没有总结,所以偶尔重写又会懵逼,所以还是要总结一下. ...
- 【BZOJ3685】【zkw权值线段树】普通van Emde Boas树
原题传送门 因为马上要开始搞树套树了,所以学了一波权值线段树...毕竟是会点zkw线段树的,所以zkw线段树大法好! 解题思路: 介绍一下权值线段树吧,其实感觉就是线段树的本义,就是你用线段树维护了数 ...
随机推荐
- NOR Flash擦写和原理分析
NOR Flash擦写和原理分析 1. NOR FLASH 的简单介绍 NOR FLASH 是很常见的一种存储芯片,数据掉电不会丢失.NOR FLASH支持Execute On Chip,即程序可以直 ...
- the server quit without updating pid file (/var/lib/mysql/localhost.localdomain.pid)
前几天装的mysql,用的还挺爽的,第二天再用就不行了,报的错误如标题.网上也是众说纷纭,可能有很多原因会导致这种错误吧.我用的是将Mysqld这个进程杀掉,就可以启动mysql了
- show status和show variables区别解析
1.show status 查看系统运行的实时状态,便于dba查看mysql当前运行的状态,做出相应优化,动态的,不可认为修改,只能系统自动update. MariaDB [(none)]> ...
- 详解收发不畅原因及U-Mail邮件中继解决之道
邮件在商务往来中扮演着信息交流的重要角色,假如传输受阻,必将造成沟通不畅:可能三五封邮件的投递你意识不到其重要性,但假如长期需和客户保持沟 通,则需要保证其一贯的稳定性,这就很考验相关软件平台的性能是 ...
- iOS高效开发必备的10款Objective-C类库
http://blog.csdn.net/yhawaii/article/details/7392988
- [MVC] DIV 布局
[MVC] DIV 布局 <style> .top { background-color: red; height: 50px; top: 0px; position: absolute; ...
- PHP用户名用星号处理
PHP用户名用*号处理: 用户名:英文.中文.中英文混合的.中英文字符混合的 处理为:首字母和末尾保留,中间用*号代替(一个字符直接显示,两个字符:张*,三个以上字符:宋*丹) 首先判断字符中是否包含 ...
- String类的构造方法详解
package StringDemo; //String类的构造方法详解 //方法一:String(); //方法二:String(byte[] bytes) //方法三:String (byte[] ...
- HDU 4831 Scenic Popularity
Scenic Popularity Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- jquery动态删除html代码
1.remove() remove()方法移除被选元素,包括所有的文本和子节点. 语法:$(selector).remove() 当我们想将元素自身移除时我们用 .remove(),同时也会移除元素内 ...