splay缩点。

#include<cstdio>
#define M (i+j>>1)
const int N=20005;
typedef struct node*ptr;
struct node{
ptr i,j;int l,r,s;
int foo(){return i->s+r-l+1;}
ptr up(){
s=foo()+j->s;return this;
}
}e[N*6];
ptr a=e;
ptr pre(int*z,int i,int j){
if(i>j)return e;
node s={pre(z,i,M-1),pre(z,M+1,j),z[M],z[M]};
return(*++a=s).up();
}
void zig(ptr&o,ptr&s){ptr t=o->i;o->i=s,s=o->up(),o=t;}
void zag(ptr&o,ptr&s){ptr t=o->j;o->j=s,s=o->up(),o=t;}
ptr splay(int z,ptr&o){
ptr s=e,t=e;
while(1)
if(z<=o->i->s){
if(z<=o->i->i->s)zig(o,o->i->j);
zig(o,s);
}else if(z>o->foo()){
z-=o->foo();
if(z>o->j->foo())
z-=o->j->foo(),zag(o,o->j->i);
zag(o,t);
}else{
z+=o->l-o->i->s-1;
if(o->l!=z)
o->i=(*++a=(node){o->i,e,o->l,z-1}).up(),o->l=z;
if(o->r!=z)
o->j=(*++a=(node){e,o->j,z+1,o->r}).up(),o->r=z;
break;
}
while(s!=e)zig(s,o->j);
while(t!=e)zag(t,o->i);
return o->up();
}
ptr&splay(int s,int t,ptr&r){
splay(s,r);
return splay(t-s+2,r->j)->i;
}
int main(){
int n,m,c,p,s,t;
static int z[N];
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)
scanf("%d",z+i);
ptr r=pre(z,0,n+1);
while(m--){
scanf("%d%d",&c,&p);
if(c==2)
printf("%d\n",splay(p+1,r)->l);
else{
scanf("%d",&s);
if(c==1)splay(p,s,r)=e;
else{
scanf("%d",&t);
splay(p+1,p,r)=(*++a=(node){e,e,s,t}).up();
}
}
}
}

BZOJ3678: wangxz与OJ的更多相关文章

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

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

  2. 【BZOJ3678】wangxz与OJ Splay

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

  3. bzoj 3678 wangxz与OJ

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

  4. 【bzoj3678】wangxz与OJ

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

  5. 【BZOJ3678】Wangxz和OJ

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

  6. [BZOJ3678]wangxz与OJ-[Splay一类的平衡树]

    Description 传送门 Solution 直接splay搞定吧..似乎非旋treap也ok? 我已经菜到模板题都写不出来了qaq Code #include<iostream> # ...

  7. NOIp2018模拟赛三十六

    好久没打模拟赛了...今天一样是两道国集,一道bzoj题 成绩:13+0+95=108 A题开始看错题了...导致样例都没看懂,结果xfz提醒我后我理解了一个我自认为正确的题意(事实证明我和xfz都错 ...

  8. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  9. Online Judge(OJ)搭建(第一版)

    搭建 OJ 需要的知识(重要性排序): Java SE(Basic Knowledge, String, FileWriter, JavaCompiler, URLClassLoader, Secur ...

随机推荐

  1. Adaboost 算法的原理与推导

    0 引言 一直想写Adaboost来着,但迟迟未能动笔.其算法思想虽然简单“听取多人意见,最后综合决策”,但一般书上对其算法的流程描述实在是过于晦涩.昨日11月1日下午,邹博在我组织的机器学习班第8次 ...

  2. CSS中margin与padding的区别

    CSS边距属性定义元素周围的空间.通过使用单独的属性,可以对上.右.下.左的外边距进行设置.也可以使用简写的外边距属性同时改变所有的外边距.——W3School 边界(margin):元素周围生成额外 ...

  3. sublime package control 被墙的解决方法

    在host里面配置 50.116.34.243 sublime.wbond.net 好用的插件地址 http://www.thinkphp.cn/topic/37057.html

  4. 转 为什么文件存储要选用B+树这样的数据结构?

    为什么文件存储要选用B+树这样的数据结构? "文件存储要选用B+树这样的数据结构"--没记错的话,这是严蔚敏那本数据结构书上的一句结论.不知道是我没细看还是她没细讲,反正当时纯粹应 ...

  5. 顺序队列C/C++实现

    #include <iostream> using namespace std; const int MAXSIZE = 1000; typedef int ELEMTYPE; const ...

  6. Chrome开发工具Elements面板(编辑DOM和CSS样式)详解

    Element 译为“元素”,Element 面板可以让我们动态查看和编辑DOM节点和CSS样式表,并且立即生效,避免了频繁切换浏览器和编辑器的麻烦. 我们可以使用Element面板来查看源代码,它不 ...

  7. 【URAL 1018】Binary Apple Tree

    http://vjudge.net/problem/17662 loli蜜汁(面向高一)树形dp水题 #include<cstdio> #include<cstring> #i ...

  8. DOS常用命令收集(长期更新)

    命令列表 命令 说明 ASSOC 显示或修改文件扩展名关联. ATTRIB 显示或更改文件属性. BREAK 设置或清除扩展式 CTRL+C 检查. BCDEDIT 设置启动数据库中的属性以控制启动加 ...

  9. 100114B

    bfs #include<iostream> #include<queue> #include<cstring> #include<cstdio> us ...

  10. svg是什么

    SVG,指可缩放矢量图形(Scalable Vector Graphics),是用于描述二维矢量图形的一种图形格式,是由万维网联盟制定的开放标准.SVG 使用 XML 格式来定义图形,除了 IE8 之 ...