#include<cstdio>
#include<cstdlib>
const int mod =;
const int inf = ~0u>>;
const int maxn = ;
int lim;
struct SplayTree {
. int sz[maxn];
. int ch[maxn][];
. int pre[maxn];
. int rt,top;
. inline void up(int x){
. sz[x] = cnt[x] + sz[ ch[x][] ] + sz[ ch[x][] ];
. }
. inline void Rotate(int x,int f){
. int y=pre[x];
. ch[y][!f] = ch[x][f];
. pre[ ch[x][f] ] = y;
. pre[x] = pre[y];
. if(pre[x]) ch[ pre[y] ][ ch[pre[y]][] == y ] =x;
. ch[x][f] = y;
. pre[y] = x;
. up(y);
. }
. inline void Splay(int x,int goal){//将x旋转到goal的下面
. while(pre[x] != goal){
. if(pre[pre[x]] == goal) Rotate(x , ch[pre[x]][] == x);
. else {
. int y=pre[x],z=pre[y];
. int f = (ch[z][]==y);
. if(ch[y][f] == x) Rotate(x,!f),Rotate(x,f);
. else Rotate(y,f),Rotate(x,f);
. }
. }
. up(x);
. if(goal==) rt=x;
. }
. inline void RTO(int k,int goal){//将第k位数旋转到goal的下面
. int x=rt;
. while(sz[ ch[x][] ] != k-) {
. if(k < sz[ ch[x][] ]+) x=ch[x][];
. else {
. k-=(sz[ ch[x][] ]+);
. x = ch[x][];
. }
. }
. Splay(x,goal);
. }
. inline void vist(int x){
. if(x){
. printf("结点%2d : 左儿子 %2d 右儿子 %2d %2d sz=%d\n",x,ch[x][],ch[x][],val[x],sz[x]);
. vist(ch[x][]);
. vist(ch[x][]);
. }
. }
. inline void Newnode(int &x,int c){
. x=++top;
. ch[x][] = ch[x][] = pre[x] = ;
. sz[x]=; cnt[x]=;
. val[x] = c;
. }
. inline void init(){
. ans=;type=-;
. ch[][]=ch[][]=pre[]=sz[]=;
. rt=top=; cnt[]=;
. Newnode(rt,-inf);
. Newnode(ch[rt][],inf);
. pre[top]=rt;
. sz[rt]=;
. }
. inline void Insert(int &x,int key,int f){
. if(!x) {
. Newnode(x,key);
. pre[x]=f;
. Splay(x,);
. return ;
. }
. if(key==val[x]){
. cnt[x]++;
. sz[x]++;
. return ;
. }else if(key<val[x]) {
. Insert(ch[x][],key,x);
. } else {
. Insert(ch[x][],key,x);
. }
. up(x);
. }
. void Del(){
. int t=rt;
. if(ch[rt][]) {
. rt=ch[rt][];
. RTO(,);
. ch[rt][]=ch[t][];
. if(ch[rt][]) pre[ch[rt][]]=rt;
. }
. else rt=ch[rt][];
. pre[rt]=;
. up(rt);
. }
. void findpre(int x,int key,int &ans){
. if(!x) return ;
. if(val[x] <= key){
. ans=x;
. findpre(ch[x][],key,ans);
. } else
. findpre(ch[x][],key,ans);
. }
. void findsucc(int x,int key,int &ans){
. if(!x) return ;
. if(val[x]>=key) {
. ans=x;
. findsucc(ch[x][],key,ans);
. } else
. findsucc(ch[x][],key,ans);
. }
. void solve() {
. int a,b,x,y;
. scanf("%d%d",&a,&b);
. if(a==type || sz[rt]==){
.
. Insert(rt,b,),type=a;
. //printf("type=%d\n",type);
. }
. else {
. findpre(rt,b,x);
. findsucc(rt,b,y);
. if(abs(val[x]-b) <= abs(val[y]-b)) {
. ans+=abs(val[x]-b);
. ans%=mod;
. Splay(x,);
. Del();
. }
. else {
. ans+=abs(val[y]-b);
. ans%=mod;
. Splay(y,);
. Del();
. }
. }
. //spt.vist(rt);
. }
. int cnt[maxn];
. int val[maxn];
. int type;
. int ans;
.}spt;
.int main()
.{
. int n;
. scanf("%d",&n);
. spt.init();
. while(n--) spt.solve();
. printf("%d\n",spt.ans);
. return ;
}

Splay!的更多相关文章

  1. 【BZOJ-3786】星系探索 Splay + DFS序

    3786: 星系探索 Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 647  Solved: 212[Submit][Status][Discuss] ...

  2. 【BZOJ】1500: [NOI2005]维修数列(splay+变态题)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1500 模板不打熟你确定考场上调试得出来? 首先有非常多的坑点...我遇到的第一个就是,如何pushu ...

  3. Splay基本操作

    我们以一道题来引入吧! 传送门 题目说的很清楚,我们的数据结构要支持:插入x数,删除x数,查询数的排名和排名为x的数,求一个数前驱后继. 似乎用啥现有的数据结构都很难做到在O(nlogn)的复杂度中把 ...

  4. 【学习笔记】splay入门(更新中)

    声明:本博客所有随笔都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 前言 终于学习了 spaly \(splay\) !听说了很久,因为dalao总 ...

  5. wikioi 1514 and ZJOI2006 书架

    1514 书架 0人推荐 收藏 发题解 提交代码 报错 题目描述 输入描述 输出描述 样例输入 样例输出 提示 题目描述 Description 小 T有一个很大的书柜.这个书柜的构造有些独特,即书柜 ...

  6. ZJOI 2019 划水记

    作为一个极其蒟蒻的OIer,虽然没有省选资格但还是去见见世面. ZJOI2019一试是在浙江省镇海中学.听名字就很霸气. 学习OI的最后一年,记录下一些事情,即使最终走到最后也一无所获,也是一段美好的 ...

  7. 【bzoj4817】树点涂色 LCT+线段树+dfs序

    Description Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色. ...

  8. csp-s2019 AFO记

    DAY 0 上午出发前大家都很颓废的样子. 我因为还没有实现刷完NOIP专题的所有题的目标而去憨比的学DDP. 最后还是不会,保卫王国是写不成了…… 该走了,学校领导来开了个欢送会,祝福我们从里WA到 ...

  9. [JZOJ5977] 【清华2019冬令营模拟12.15】堆

    题目 其中n,q≤500000n,q\leq 500000n,q≤500000 题目大意 让你维护一个堆.支持一下操作: 在某个点的下面加上另一个点,然后进行上浮操作. 询问某一点的权值. 思考历程 ...

随机推荐

  1. Java Tool

    PS参数详解 http://blog.csdn.net/hanner_cheung/article/details/6081440 JVM 参数 JVM调优总结 -Xms -Xmx -Xmn –Xss ...

  2. Android TextView 显示不全的自动补齐方式

    TextView在Android开发中用到的地方应该是很多的.很多时候,TextView会有一行显示不全被截取或者会换行.之前我的解决办法比较笨拙,定死TextView的一行字数长度,最后一个以省略号 ...

  3. avalon---qunar ued

    http://avalonjs.github.io/ http://ued.qunar.com/ https://github.com/RubyLouvre/avalon 1.前后端分离-- 2.gr ...

  4. 答CsdnBlogger问-关于定时和后台服务问题

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 前段时间写了不少博客,在问答页面也陆续回答几十个问题,之后Csdn乙同学找到我,说要推荐我参加问答类 ...

  5. RelativeLayout不能调用measure去直接测量子元素

    RelativeLayout在实现onMeasure方法时并没有像LinearLayout一样去重写如下代码: @Override protected void onMeasure(int width ...

  6. TCP 协议中MSS的理解

    在介绍MSS之前我们必须要理解下面的几个重要的概念.MTU: Maxitum Transmission Unit 最大传输单元MSS: Maxitum Segment Size 最大分段大小PPPoE ...

  7. [代码片段]OSTU算法

    用在片上系统上的 //OSTU求图像的阈值 u8 otsuThreshold(u8 **img, u16 height, u16 width) { // int width = frame->w ...

  8. php实现斐波那契数列以及由此引起的联想

    斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一 ...

  9. web前端学习网址

    最近一次电脑崩溃,重装系统所有在浏览器的网址,烟霄云散了…… 手册网址: http://www.shouce.ren/api/index demo学习网址: http://www.w3cplus.co ...

  10. eclipse中tomcat能正常启动,但是浏览器访问不了tomcat首页

    在eclipse中新建tomcat7,完成后tomcat能够正常启动,但是浏览器问题localhost:8080访问不了. 解决方法如下: 双击eclipse中服务器中的tomcat 出现tomcat ...