自己yy了找前驱和后继,学了学怎么删除。。。(反正就是练模板)

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 80005
#define lc(x) ch[x][0]
#define rc(x) ch[x][1]
#define inf 0x3f3f3f3f
using namespace std;
int n,k[N*],size,ch[N*][],root,cnt,fa[N];
void rotate(int p)
{
int q=fa[p],y=fa[q],x=(ch[q][]==p);
ch[q][x]=ch[p][x^];fa[ch[q][x]]=q;
ch[p][x^]=q;fa[q]=p;
fa[p]=y;
if(y)
{
if(ch[y][]==q)ch[y][]=p;
else ch[y][]=p;
}
}
void splay(int x)
{
for(int y;y=fa[x];rotate(x))
{
if(fa[y])
{
if((y==lc(fa[y])&&x==lc(y))||(y==rc(fa[y])&&x==rc(y)))rotate(y);
else rotate(x);
}
}
root=x;
}
void insert(int x,int v)
{
while(ch[x][k[x]<v])x=ch[x][k[x]<v];
ch[x][k[x]<v]=++cnt;
fa[cnt]=x;k[cnt]=v;splay(cnt);
}
int now1,now2;
int pre(int x,int v)
{
int tmp=-inf;
while(ch[x][k[x]<v])
{
if(k[x]<=v)if(k[x]>tmp)tmp=k[x],now1=x;
x=ch[x][k[x]<v];
}if(k[x]<=v)if(k[x]>tmp)tmp=k[x],now1=x;
return tmp;
}
int suc(int x,int v)
{
int tmp=inf;
while(ch[x][k[x]<v])
{
if(k[x]>=v)if(k[x]<tmp)tmp=k[x],now2=x;
x=ch[x][k[x]<v];
}if(k[x]>=v)if(k[x]<tmp)tmp=k[x],now2=x;
return tmp;
}
void del(int x)
{
splay(x);
if(!ch[x][])fa[ch[x][]]=,root=ch[x][];
else if(!ch[x][])fa[ch[x][]]=,root=ch[x][];
else
{
fa[ch[x][]]=;
int tmp=ch[x][];while(ch[tmp][])tmp=ch[tmp][];
splay(tmp);
ch[tmp][]=ch[x][];fa[ch[x][]]=tmp;
}
return ;
}
int main()
{
scanf("%d",&n);
cnt=;root=;
k[]=inf;int ans=;
insert(root,-inf);
size=;int shu=;
for(int i=;i<=n;i++)
{
int t1,t2;scanf("%d%d",&t1,&t2);
if(!t1)
{
if(!shu||size==)
{
insert(root,t2);
shu=;size++;
}
else
{
size--;
int qq=pre(root,t2),ww=suc(root,t2);
if(abs(qq-t2)<=abs(ww-t2))
{
ans+=abs(qq-t2);del(now1);
}
else
{
ans+=ww-t2;del(now2);
}
}
}
else
{
if(shu||size==)
{
insert(root,t2);
shu=;size++;
}
else
{
size--;
int qq=pre(root,t2),ww=suc(root,t2);
if(abs(qq-t2)<=abs(ww-t2))
{
ans+=abs(qq-t2);del(now1);
}
else
{
ans+=ww-t2;del(now2);
}
}
}
ans%=;
}
printf("%d\n",ans);
return ;
}

bzoj 1208 splay模板题2的更多相关文章

  1. bzoj 1588 splay模板题

    用晚自习学了一下splay模板,没想象中那么难,主要是左旋和右旋可以简化到一个函数里边,减少代码长度... #include<iostream> #include<cstdio> ...

  2. bzoj 3224 splay模板题4

    再刷水题我就废了... #include<iostream> #include<cstdio> #include<algorithm> #include<cs ...

  3. bzoj 3223 splay模板题3

    水题...貌似理解splay怎么维护数列了... 每个点维护一个size,它的位置就是它的size,区间翻转的话可以打标记,find的时候push_down,交换左右子树. #include<i ...

  4. BZOJ 1208 [HNOI2004]宠物收养所 | SPlay模板题

    题目: 洛谷也能评 题解: 记录一下当前树维护是宠物还是人,用Splay维护插入和删除. 对于任何一次询问操作都求一下value的前驱和后继(这里前驱和后继是可以和value相等的),比较哪个差值绝对 ...

  5. 【BZOJ 3196】二逼平衡树 线段树套splay 模板题

    我写的是线段树套splay,网上很多人写的都是套treap,然而本蒟蒻并不会treap 奉上sth神犇的模板: //bzoj3196 二逼平衡树,支持修改某个点的值,查询区间第k小值,查询区间某个值排 ...

  6. 【BZOJ 3188】【Coci 2011】Upit Splay模板题

    转啊转终于转出来了,然而我的模板跟陈竞潇学长的模板一模一样,还是太弱啊,第一次用指针. #include<cstdio> #include<cstring> #include& ...

  7. BZOJ 1588 平衡树 模板题

    Treap: //By SiriusRen #include <cstdio> #include <algorithm> using namespace std; int si ...

  8. BZOJ 3224 平衡树模板题

    Treap: //By SiriusRen #include <cstdio> #include <algorithm> using namespace std; int n, ...

  9. PKU-3580 SuperMemo(Splay模板题)

    SuperMemo 题目链接 Your friend, Jackson is invited to a TV show called SuperMemo in which the participan ...

随机推荐

  1. NPM 如何升级?

  2. 根据Unicode编码用C#语言把它转换成汉字的代码

    rt 根据所具有的Unicode编码用C#语言把它转换成汉字的代码 var s = System.Web.HttpUtility.HtmlDecode(Utf8Str); var o = Newton ...

  3. 十大经典排序算法总结——JavaScrip版

    首先,对于评述算法优劣术语的说明: 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面:即排序后2个相等键值的顺序和排序之前它们的顺序相同 不稳定:如果a原本在b的前面,而a=b,排序之后a ...

  4. .NET MVC控制器分离到类库的方法

    在.ASP.NET MVC的开发中,我们创建完项目之后,ASP.NET MVC是已Model-Controller-View的形式存在的,在创建项目自动生成的内容上Model我们很容易分离成类库,所以 ...

  5. OSWatcher Black Box

    Linux监控工具介绍系列--OSWatcher Black Box OSWatcher Balck Box简介 OSWatcher Black Box (oswbb)是Oracle开发.提供的一个小 ...

  6. sobel算子

    #1,个人理解 网上查了很多资料,都说sobel算子是用来检测边缘的,分别给了两个方向上的卷积核,然后说明做法,就说这就是sobel算子.对于我个人来说,还有很多不明白的地方,所以理清下思路. #2, ...

  7. jboss:跟踪所有sql语句及sql参数

    默认情况下,hibernate/JPA 在server.log中记录的SQL语句,参数都是用?代替的,这样不太方便. 网上留传的p6spy在最新的jboss上(EAP 6.0+版本)貌似已经不起作用了 ...

  8. Oracle 常见错误排查

    1. java.sql.SQLException: ORA-01000: 超出打开游标的最大数 step 1: 查看数据库当前的游标数配置slqplus:show parameter open_cur ...

  9. 快速开发之代码生成器(asp.net mvc4 + easyui + knockoutjs)

    一.前言 作为一个码农这么多年,一直在想怎么提高我们的编码效率,关于如何提高编码效率,我自己的几点体会 1.清晰的项目结构,要编写代码的地方集中 2.实现相同功能的代码量少并且清晰易懂 3.重复或有规 ...

  10. 【语言基础】c++ 基本数据类型与字节数组(string,char [] )之间的转化方法

    有时候我们需要将基本数据类型转化为字节,以便写入文件,然后必要时还需要将这些字节读出来.有人说,为啥不把数字直接存进文件呢?比如:100,000,000,我们直接存数字明文到文件那就是9个字符(cha ...