【权值线段树】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线段树大法好! 解题思路: 介绍一下权值线段树吧,其实感觉就是线段树的本义,就是你用线段树维护了数 ...
随机推荐
- NFC学习 (1)
NFC Smart Poster: 放入NFC TAG的都是Smart Poster Advantage: 1.在展示动态内容方面有低功耗的优势: 2.容易扩展容量: 3.容易修改内容(修改后台或者 ...
- Loadrunner ---集合点设置
测试场景,实现用户登录的200并发: 1.录制登录退出脚本,且登录退出放aciton中 2.在登录的地方设置集合点 设置集合点有如下4中方式: 1)在要插入集合点的地方,右击鼠标按如下图操作:
- 仿QQ的底部选项
效果图: item_add.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...
- ZooKeeper设置ACL权限控制
ZK的节点有5种操作权限:CREATE.READ.WRITE.DELETE.ADMIN 也就是 增.删.改.查.管理权限,这5种权限简写为crwda(即:每个单词的首字符缩写)注:这5种权限中,del ...
- PPTP-VPN第一章——部署与简单使用
最近前游戏同事搞了台的VPS,贡献出来做VPN使用.目前流行的服务器VPN软件主要有PPTP VPN和Openvpn.Openvpn虽然功能较为强大,且安全性高,支持nat穿越等等,但服务器端和客户端 ...
- jquery blockui 遮罩
参考 : http://bookshadow.com/weblog/2014/09/26/jquery-blockui-js-introduction/ blockUI.html blockUI.ht ...
- display:table-cell介绍
一.display:table-cell属性简述 display:table-cell属性指让标签元素以表格单元格的形式呈现,类似于td标签.目前IE8+以及其他现代浏览器都是支持此属性的,但是IE6 ...
- SQL三大范式三个例子搞定
第一范式(1NF) (必须有主键,列不可分) 数据库表中的任何字段都是单一属性的,不可再分 create table aa(id int,NameAge varchar(100)) insert aa ...
- 关于python3.X 报"import urllib.request ImportError: No module named request"错误,解决办法
#encoding:UTF-8 import urllib.request url = "http://www.baidu.com" data = urllib.request.u ...
- Zabbix(一)--zabbix 2.4.8 安装
zabbix依赖于LAMP,所以部署前要先保证这个平台. 安装服务端(Server) zabbix官网的rpm包都是按照功能分开一个个,比如: zabbix-server-2.4.7-1.el7.x8 ...