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一类的平衡树]的更多相关文章

  1. 【BZOJ3678】wangxz与OJ Splay

    [BZOJ3678]wangxz与OJ Description 某天,wangxz神犇来到了一个信息学在线评测系统(Online Judge).由于他是一位哲♂学的神犇,所以他不打算做题.他发现这些题 ...

  2. BZOJ3678 wangxz与OJ (平衡树 无旋treap)

    题面 维护一个序列,支持以下操作: 1.在某个位置插入一段值连续的数. 2.删除在当前序列位置连续的一段数. 3.查询某个位置的数是多少. 题解 显然平衡树,一个点维护一段值连续的数,如果插入或者删除 ...

  3. BZOJ3678: wangxz与OJ

    splay缩点. #include<bits/stdc++.h> #define L(t) (t)->c[0] #define R(t) (t)->c[1] #define F ...

  4. bzoj 3678 wangxz与OJ

    3678: wangxz与OJ Time Limit: 10 Sec  Memory Limit: 128 MBhttp://www.lydsy.com/JudgeOnline/problem.php ...

  5. 洛谷P3285 [SCOI2014]方伯伯的OJ 动态开点平衡树

    洛谷P3285 [SCOI2014]方伯伯的OJ 动态开点平衡树 题目描述 方伯伯正在做他的 \(Oj\) .现在他在处理 \(Oj\) 上的用户排名问题. \(Oj\) 上注册了 \(n\) 个用户 ...

  6. 【bzoj3678】wangxz与OJ

    Portal -- > bzoj 3678 Solution 这题==真实智力康复qwq 然而众多神犇都说是10min写完的题我..可能写了近1h吧==深深感受到自己的弱小qwq (丢上来是因为 ...

  7. 【BZOJ3678】Wangxz和OJ

    题意: 不想讲 题解: Rope真香! 正解是Splay缩点,访问时再拆成一个序列 代码: //STL dafa good! #include<algorithm> #include< ...

  8. BZOJ 3595: [Scoi2014]方伯伯的Oj Splay + 动态裂点 + 卡常

    Description 方伯伯正在做他的Oj.现在他在处理Oj上的用户排名问题. Oj上注册了n个用户,编号为1-”,一开始他们按照编号排名.方伯伯会按照心情对这些用户做以下四种操作,修改用户的排名和 ...

  9. luogu P3285 [SCOI2014]方伯伯的OJ splay 线段树

    LINK:方伯伯的OJ 一道稍有质量的线段树题目.不写LCT splay这辈子是不会单独写的 真的! 喜闻乐见的是 题目迷惑选手 \(op==1\) 查改用户在序列中的位置 题目压根没说位置啊 只有排 ...

随机推荐

  1. Java并发案例01---多线程之死锁

    多线程之死锁案例一 package example; /** * 模拟死锁 * @author maple * */ public class DeadLock { public int flag = ...

  2. flutter 配置环境

    1. 下载java SDK https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html c ...

  3. svn .externals 属性

    问:如下自定下载关联模块呢? 答:第一步: 编辑svn.externals文本,如下所示 dir/moduel_name URL/module dir/moduel_name URL/module 第 ...

  4. 软工之404 Note Found团队

    如果记忆是一个罐头的话,我希望这一罐罐头不会过期----<重庆森林> 404 Note Found Team 如果记忆是一个备忘录的话,别说了,它不会过期----<404 Note ...

  5. volatile关键字到底做了什么?

    话不多说,直接贴代码 class Singleton { private static volatile Singleton instance; private Singleton(){} //双重判 ...

  6. iOS之禁止所有输入法的表情

    - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSSt ...

  7. Mybatis-smart(Mybatis最终优化方案)

    Hibernate: 我用了Hibernate一年多,可以说是饱经风雨,感受极深,Hibernate看似一个很好的框架,我简单说一下它的使用痛点, 1.作为开发人员,我们应该全新全意关注我们的功能业务 ...

  8. vue中使用swiper并自定义分页器样式

    一,安装swiper 执行命令 npm install vue-awesome-swiper --save 二,引入swiper import {Swiper} from "vue-awes ...

  9. leyer不写content参数直接传递给子页面数据

    function btnAddClickownfund(){ //获取数据 var actual = $("#actual_capitals").html().trim(); // ...

  10. koa2学习笔记03 - 给koa2配置session ——koa2结构分层、配置数据库、接口

    前言 这一章写的很没有底气,因为我完全不懂一个正经的后台应用是怎么结构分层的, 所有只能按照我自己的理解去写,即使这样也仅仅只分离出了controller层, 至于所谓的service层,dao层,完 ...