本题考查的是数据结构,很基础的平衡树就可以解决,所以本题c++的同学可以用stl库开挂直接过的,而像我这种暂时不愿转c++的弱菜只好手写平衡树了。

这题用splay做的话难度不是很大,一些基本的操作就可以解决问题,但是在写代码的时候还是得需要足够的细心和耐心。值得注意的是怎样判断当前树里记录的是宠物还是主人。不难发现,树里记录的不管是宠物还是主人操作都是一样的,所以可以开一个变量记录当前树里记录的类型,当一棵树都取光时把变量重置即可。

最后删除时推荐用内存回收,还有不要忘记取余。

最后就是代码,求大神不鄙视

constMMOD=1000000;MAXN=80000;
typedate=recordch:array[0..1]of longint;v,f:longint;end;
varn,i,root,top,tst,c,x,y,a,b,min,sum:longint;st:array[0..MAXN+10]of longint;t:array[0..MAXN+10]of date;
procedure newnode(var x:longint;f,k:longint);
beginif(tst<>0)then begin x:=st[tst];dec(tst) endelse begin inc(top);x:=top end;t[x].ch[0]:=0;t[x].ch[1]:=0;t[x].v:=k;t[x].f:=f;
end;
function cmp(x,k:longint):longint;
beginif(t[x].ch[0]=k)then exit(0) else exit(1);
end;
procedure rotate(k,c:longint);
var i:longint;
begini:=t[k].f;t[i].ch[c xor 1]:=t[k].ch[c];t[t[k].ch[c]].f:=i;t[k].ch[c]:=i;t[k].f:=t[i].f;if(t[i].f<>0)then t[t[i].f].ch[cmp(t[i].f,i)]:=k;t[i].f:=k;
end;
procedure splay(k,goal:longint);
var x,y,f1,f2:longint;
beginwhile(t[k].f<>goal)dobeginx:=t[k].f;y:=t[x].f;if(y=goal)then rotate(k,cmp(x,k)xor 1)else beginf1:=cmp(y,x);f2:=cmp(x,k);if(f1=f2)then begin rotate(x,f1 xor 1);rotate(k,f1 xor 1) endelse begin rotate(k,f2 xor 1);rotate(k,f1 xor 1) end;end;end;if(goal=0)then root:=k;
end;
procedure insert(k:longint);
var i,j,x:longint;
begini:=root;j:=0;repeatj:=i;if(k<t[i].v)then i:=t[i].ch[0] else i:=t[i].ch[1];until i=0;if(k<t[j].v)then x:=0 else x:=1;newnode(t[j].ch[x],j,k);splay(t[j].ch[x],0);
end;
procedure find(k:longint);
var i:longint;
begini:=root;repeatif(t[i].v<=k)then a:=i;if(t[i].v>=k)then b:=i;if(t[i].v=k)then exit;if(k<t[i].v)then i:=t[i].ch[0] else i:=t[i].ch[1];until i=0;
end;
procedure del(k:longint);
var i,j:longint;
beginsplay(k,0);inc(tst);st[tst]:=k;if(t[k].ch[0]=0)thenbeginif(t[k].ch[1]=0)thenbeginc:=-1;root:=0;exit;end;root:=t[k].ch[1];t[t[k].ch[1]].f:=0;exit;endelse begini:=t[k].ch[0];j:=0;while(i<>0)dobeginj:=i;i:=t[i].ch[1];end;splay(j,root);root:=t[root].ch[0];t[root].f:=0;t[root].ch[1]:=t[k].ch[1];t[t[k].ch[1]].f:=root;end;
end;
beginreadln(n);c:=-1;sum:=0;top:=0;root:=0;tst:=0;for i:=1 to n dobeginreadln(x,y);if(c=-1)thenbeginc:=x;newnode(root,0,y);endelse if(c=x)then insert(y)else if(c<>x)thenbegina:=0;b:=0;min:=0;find(y);if(b=0)then min:=a;if(a=0)then min:=b;if(a<>0)and(b<>0)thenbeginif(abs(t[a].v-y)<=abs(t[b].v-y))then min:=a else min:=b;end;sum:=(sum+abs(t[min].v-y))mod MMOD;del(min);end;end;writeln(sum);
end.

[bzoj1208] [HNOI2004]宠物收养所相关推荐

  1. BZOJ1208[HNOI2004]宠物收养场——treap

    凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的一个特殊的公式,得出该领养者希望领 ...

  2. bzoj1208: [HNOI2004]宠物收养所

    Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 6182  Solved: 2396 [Submit][Status][Discuss] Descri ...

  3. bzoj1208: [HNOI2004]宠物收养所 SBTSplay

    初次写SBT.....感觉sbt跟线段树一样,多写写就熟了. #include <iostream> #include <algorithm> #include <cst ...

  4. cogs62 [HNOI2004] 宠物收养所

    cogs62 [HNOI2004] 宠物收养所 啦啦啦啦 不维护区间的平衡树题都是树状数组+二分练手题! 不会的参考我的普通平衡树的多种神奇解法之BIT+二分答案 // It is made by X ...

  5. BZOJ 1208: [HNOI2004]宠物收养所

    1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 7684  Solved: 3042 [Submit][S ...

  6. 1208: [HNOI2004]宠物收养所

    1208: [HNOI2004]宠物收养所 1.用Treap树写: 只需要三个操作,插入,删除,查找(同时找出其前继后继): View Code /************************** ...

  7. BZOJ 1208: [HNOI2004]宠物收养所 (Treap)

    BZOJ 1208: [HNOI2004]宠物收养所 题目概述: 有一家宠物收养所,提供两种服务:收养主人遗弃的宠物和让新主人领养宠物. 宠物收养所中总是会有两种情况发生:遗弃宠物过多和领养宠物人过多 ...

  8. 洛谷P2286 [HNOI2004]宠物收养所 [STL,平衡树]

    题目传送门 宠物收养所 题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的 ...

  9. B1208 [HNOI2004]宠物收养所 平衡树||set (滑稽)

    这个题是一道splay裸题,但是我不太会写,所以用set直接水过去!!!哈哈哈哈,美滋滋. set总结: set是一个集合,然后里面没用重复的元素.里面有一些函数: begin()     ,返回se ...

最新文章

  1. dns劫持简介 https流量数据获取原理
  2. actuator 微服务信息的完善
  3. dmp标签_京东dmp人群标签的使用,直接决定了你快车的盈利
  4. java在所选路径中找到分号,classpath
  5. 英文简历的几种常见形式
  6. centos6.5下安装gradle编译环境
  7. Haoop0.20.1+Ubuntu11.10+Eclipse3.5.2
  8. 电脑全能工具箱,400+工具免费用
  9. 数据中心服务器巡检方案,IDC机房巡检方案
  10. 单片机C语言编程实例分析详解,单片机C语言编程的八个基本规则解析
  11. 怎么把手机字体改成繁体_如何把手机字体变成繁体 繁体字转换器
  12. 用Python代码实现将exl表格内容,批量写到word里面
  13. java中.rtf文件变成文本文件
  14. UML 基本模型元素
  15. 判断玩家是否开全图挂
  16. cad计算路网密度加调整路线
  17. 手机遥控器在微信端的处理
  18. 将一个数组中重复的元素去除,并且返回一个新数组
  19. 深度解析CTM项目成功的原因
  20. SaaS与套装软件的“湿地”遭遇战

热门文章

  1. 京瓷1800打印机扫描步骤_京瓷1800操作指南
  2. 蓝桥杯算法训练cowboys-dp-递归-python题解
  3. 收集增强WiFi信号的10种方法
  4. android开发出现错误:Failed to find configured root that contains
  5. 数据库:PostgreSQL 和 MySQL对比
  6. 深度学习在图像领域的应用
  7. 异常被 ”吃“ 掉导致事务无法回滚
  8. 无人驾驶技术——初探Kalman滤波器
  9. 字王·百字工程·2016中秋纪念
  10. CTO要越过的几道坎儿