[BZOJ3678]wangxz与OJ-[Splay一类的平衡树]
Description
Solution
直接splay搞定吧。。似乎非旋treap也ok?
我已经菜到模板题都写不出来了qaq
Code
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int n,m,A[];
struct Splay
{
int rt,cnt=;
int ch[][],num[][],sz[],fa[];
void pushup(int k){ sz[k]=sz[ch[k][]]+sz[ch[k][]]+num[k][]-num[k][]+;}
void build(int &k,int l,int r)
{
k=++cnt;
int mid=(l+r)/;
num[k][]=num[k][]=A[mid];
if (l<mid) build(ch[k][],l,mid-);
if (mid<r) build(ch[k][],mid+,r);
fa[ch[k][]]=fa[ch[k][]]=k;
pushup(k);
}
void rotate(int x,int &rt)
{
int y=fa[x],k=ch[y][]==x;
ch[y][k]=ch[x][k^];fa[ch[y][k]]=y;
if (y==rt) rt=x;else ch[fa[y]][ch[fa[y]][]==y]=x;
fa[x]=fa[y];
fa[y]=x;ch[x][k^]=y;
pushup(y);pushup(x);
}
void splay(int x,int &rt)
{
int y;
while (x!=rt)
{
y=fa[x];
if (y!=rt&&(ch[fa[y]][]==y)==(ch[y][]==x)) rotate(y,rt);
rotate(x,rt);
}
}
int work(int x,int k)
{
if (sz[ch[x][]]>=k) return work(ch[x][],k);
if (sz[x]-sz[ch[x][]]<k) return work(ch[x][],k-sz[x]+sz[ch[x][]]);
k-=sz[ch[x][]];int son;
if (k!=)
{
son=++cnt;
num[son][]=num[x][];num[son][]=num[son][]+k-;
num[x][]=num[son][]+; fa[son]=x;
ch[son][]=ch[x][];
ch[x][]=son;
pushup(son);
k=;
}
if (k!=num[x][]-num[x][]+)
{
son=++cnt;
num[son][]=num[x][]+k;
num[son][]=num[x][];
num[x][]=num[son][]-; fa[son]=x;
ch[son][]=ch[x][];
ch[x][]=son;
pushup(son);
}
return x;
}
void insert(int p,int a,int b)
{
int x1=work(rt,p),x2=work(rt,p+);
splay(x1,rt);
splay(x2,ch[x1][]);
int son=++cnt;
num[son][]=a;num[son][]=b;fa[son]=x2;
ch[x2][]=son;
sz[son]=b-a+;
pushup(x2);
pushup(x1);
}
void remove(int a,int b)
{
int x1=work(rt,a-),x2=work(rt,b+);
splay(x1,rt);
splay(x2,ch[x1][]);
ch[x2][]=;
pushup(x2);
pushup(x1);
}
int query(int x,int q)
{
if (!x) return ;
if (sz[ch[x][]]>=q) return query(ch[x][],q);
if (sz[x]-sz[ch[x][]]>=q)
{q-=sz[ch[x][]];return num[x][]+q-;}
return query(ch[x][],q-sz[x]+sz[ch[x][]]); }
}splay;
int _type,p,a,b;
int main()
{
scanf("%d%d",&n,&m);
n++;
for (int i=;i<=n;i++) scanf("%d",&A[i]);
n++;
splay.build(splay.rt,,n);
for (int i=;i<=m;i++)
{
scanf("%d",&_type);
if (!_type)
{
scanf("%d%d%d",&p,&a,&b);p++;
splay.insert(p,a,b);
}
if (_type==)
{
scanf("%d%d",&a,&b);a++;b++;
splay.remove(a,b);
}
if (_type==)
{
scanf("%d",&p);p++;
printf("%d\n",splay.query(splay.rt,p));
}
}
}
[BZOJ3678]wangxz与OJ-[Splay一类的平衡树]的更多相关文章
- 【BZOJ3678】wangxz与OJ Splay
[BZOJ3678]wangxz与OJ Description 某天,wangxz神犇来到了一个信息学在线评测系统(Online Judge).由于他是一位哲♂学的神犇,所以他不打算做题.他发现这些题 ...
- BZOJ3678 wangxz与OJ (平衡树 无旋treap)
题面 维护一个序列,支持以下操作: 1.在某个位置插入一段值连续的数. 2.删除在当前序列位置连续的一段数. 3.查询某个位置的数是多少. 题解 显然平衡树,一个点维护一段值连续的数,如果插入或者删除 ...
- BZOJ3678: wangxz与OJ
splay缩点. #include<bits/stdc++.h> #define L(t) (t)->c[0] #define R(t) (t)->c[1] #define F ...
- bzoj 3678 wangxz与OJ
3678: wangxz与OJ Time Limit: 10 Sec Memory Limit: 128 MBhttp://www.lydsy.com/JudgeOnline/problem.php ...
- 洛谷P3285 [SCOI2014]方伯伯的OJ 动态开点平衡树
洛谷P3285 [SCOI2014]方伯伯的OJ 动态开点平衡树 题目描述 方伯伯正在做他的 \(Oj\) .现在他在处理 \(Oj\) 上的用户排名问题. \(Oj\) 上注册了 \(n\) 个用户 ...
- 【bzoj3678】wangxz与OJ
Portal -- > bzoj 3678 Solution 这题==真实智力康复qwq 然而众多神犇都说是10min写完的题我..可能写了近1h吧==深深感受到自己的弱小qwq (丢上来是因为 ...
- 【BZOJ3678】Wangxz和OJ
题意: 不想讲 题解: Rope真香! 正解是Splay缩点,访问时再拆成一个序列 代码: //STL dafa good! #include<algorithm> #include< ...
- BZOJ 3595: [Scoi2014]方伯伯的Oj Splay + 动态裂点 + 卡常
Description 方伯伯正在做他的Oj.现在他在处理Oj上的用户排名问题. Oj上注册了n个用户,编号为1-”,一开始他们按照编号排名.方伯伯会按照心情对这些用户做以下四种操作,修改用户的排名和 ...
- luogu P3285 [SCOI2014]方伯伯的OJ splay 线段树
LINK:方伯伯的OJ 一道稍有质量的线段树题目.不写LCT splay这辈子是不会单独写的 真的! 喜闻乐见的是 题目迷惑选手 \(op==1\) 查改用户在序列中的位置 题目压根没说位置啊 只有排 ...
随机推荐
- J2EE项目异常处理(转)
为什么要在J2EE项目中谈异常处理呢?可能许多java初学者都想说:“异常处理不就是try….catch…finally吗?这谁都会啊!”.笔者在初学java时也是这样认为的.如何在一个多层的j2e ...
- css3 圣诞红包雨效果
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- antlr-2.7.6.jar的作用
项目中没有添加antlr-2.7.6.jar,hibernate不会执行hql语句 并且会报NoClassDefFoundError: antlr/ANTLRException错误
- select下拉的绑定及回显(ajxa)
下拉列表一般通过ajax请求数据绑定 // 绑定新闻类型下拉 function news_type() { var news_type=$("#news_type").val(); ...
- zk集群的快速搭建
1.上传一个zk.tar2.解压3.创建目录data4.修改zoo_sample.cfg ---> zoo.cfg5.修改文件的dataDir改为/data目录,echo 1 >/data ...
- 人人开源之renren-security
renren-security,从这周开始我将要对其比较详细的研究,之前的研究只不过是比较浅的.正如在这篇文章读读<编写高质量代码:改善Java程序的151条建议>中说过不要重复造轮子. ...
- java动态代理的基本思想以及简单的实现
代理模式 本人参考于代理模式及Java实现动态代理 不作为商业用途,只是借鉴于其思路.侵权即删. 原理:给某个对象提供一个代理对象,并且由代理对象控制原对象的访问,即不直接操控原对象,而是通过代理对 ...
- 阅读基于sketch的软件定义网络测量数据平面硬件模型
概要 硬件实现 基于sketch 功能:采集包数.流长数据,恢复五元组 重点:高速条件下性能较好,节省硬件资源 摘要: 提出一种基于sketch 数据结构的软件定义测量数据平面硬件模型,并在以现场可编 ...
- DPDK测试用例(sample)编译
前言 要使用DPDK的测试用例,必须先进行编译,以此记录编译的操作,方便日后查找 编译用例 设置环境变量,将DPDK的目录路径添加到编译代码中,RTE_SDK指示DPDK目录路径: export RT ...
- 获取某商家当前每个月销量sql语句。
用两个mysql函数 FROM_UNIXTIME( ordertime )将日期格式转换成时间戳 month( FROM_UNIXTIME( ordertime ) ) 获取当前日期的月 select ...