splay树 1285 宠物收养所
#include<cstdio>
#include<iostream>
using namespace std;
int shu[80004][2],n,size,root,kind,zhi[80004],fa[80004],sum=0;
int b1,b2;
void xuan(int a1)
{
int a2,a3,l,r;
a2=fa[a1];
a3=fa[a2];
if(shu[a2][0]==a1)
l=0;
else
l=1;
r=l^1;
if(a2==root)
root=a1;
else
if(shu[a3][0]==a2)
shu[a3][0]=a1;
else
shu[a3][1]=a1;
fa[a1]=a3;
fa[a2]=a1;
shu[a2][l]=shu[a1][r];
fa[shu[a1][r]]=a2;
shu[a1][r]=a2;
return;
}
void zhuan(int a1)
{
int y,z;
for(;a1!=root;)
{
y=fa[a1];
z=fa[y];
if(y!=root)
if((shu[y][0]==a1)^(shu[z][0]==y))
xuan(a1);
else
xuan(y);
xuan(a1);
}
}
void cha(int &a1,int a2,int a3)
{
if(a1==0)
{
size++;
a1=size;
zhi[a1]=a2;
fa[a1]=a3;
zhuan(a1);
return;
}
if(a2<zhi[a1])
cha(shu[a1][0],a2,a1);
else
cha(shu[a1][1],a2,a1);
return;
}
void qian(int a1,int a2)
{
if(a1==0)
return;
if(zhi[a1]<=a2)
{
b1=a1;
qian(shu[a1][1],a2);
}
else
qian(shu[a1][0],a2);
return;
}
void hou(int a1,int a2)
{
if(a1==0)
return;
if(zhi[a1]>=a2)
{
b2=a1;
hou(shu[a1][0],a2);
}
else
hou(shu[a1][1],a2);
}
void del(int a1)
{
zhuan(a1);
if(shu[a1][0]*shu[a1][1]==0)
root=shu[a1][0]+shu[a1][1];
else
{
int k=shu[a1][1];
while(shu[k][0])
k=shu[k][0];
shu[k][0]=shu[a1][0];
fa[shu[a1][0]]=k;
root=shu[a1][1];
}
fa[root]=0;
return;
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
int a1,a2;
scanf("%d%d",&a1,&a2);
if(!root)
kind=a1;
if(kind==a1)
cha(root,a2,0);
else
{
b1=-1;
b2=-1;
qian(root,a2);
hou(root,a2);
if(b1==-1)
{
sum+=zhi[b2]-a2;
sum%=1000000;
del(b2);
}
else if(b2==-1)
{
sum+=a2-zhi[b1];
sum%=1000000;
del(b1);
}
else if(a2-zhi[b1]<=zhi[b2]-a2)
{
sum+=a2-zhi[b1];
sum%=1000000;
del(b1);
}
else
{
sum+=zhi[b2]-a2;
sum%=1000000;
del(b2);
}
}
}
printf("%d",sum);
return 0;
}
splay树 1285 宠物收养所的更多相关文章
- 【wikioi】1285 宠物收养所
题目链接:http://www.wikioi.com/problem/1285/ 算法:Splay 刚开始看到这题,就注意到特征abs了,并且数据n<=80000显然不能暴力,只能用nlgn的做 ...
- C++之路进阶——codevs1285(宠物收养所)
1285 宠物收养所 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 最近,阿Q开了一间宠物收养所.收养所提供两种服 ...
- HNOI2004 宠物收养所 (Treap)
1285 宠物收养所 http://codevs.cn/problem/1285/ 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description 最近,阿Q开了一间 ...
- BZOJ 1208 [HNOI2004]宠物收养所:Splay(伸展树)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1208 题意: 有一个宠物收养所,在接下来一段时间内会陆续有一些宠物进到店里,或是一些人来领 ...
- HYSBZ 1208 宠物收养所 (Splay树)
题意:一家宠物收养所负责处理领养者与遗弃宠物业务,有人来领宠物,则领一只最理想的.若没有宠物了,领养者们就得等到宠物来,宠物一来立刻送给其中一个等待者.如果有两个理想的选择,则选择那个值较小的.收养所 ...
- 【HNOI2004】宠物收养所(splay)
题面 Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的 ...
- [HNOI2004]宠物收养场 BZOJ1208 splay tree
题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的一个特殊的公式,得出该领 ...
- [BZOJ1208]宠物收养所(Splay)
Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特 ...
- 【BZOJ1208】[HNOI2004]宠物收养所 Splay
还是模板题,两颗splay,找点删即可. #include <iostream> #include <cstdio> #include <cstdlib> #def ...
随机推荐
- 机器学习支持向量机SVM笔记
SVM简述: SVM是一个线性二类分类器,当然通过选取特定的核函数也可也建立一个非线性支持向量机.SVM也可以做一些回归任务,但是它预测的时效性不是太长,他通过训练只能预测比较近的数据变化,至于再往后 ...
- PowerBuilder学习笔记之8.5高级窗口控件
1.列表框控件 列表框控件(ListBox).图片列表框控件(PictureListBox).下拉列表框控件(DropDownListBox)以及下拉图片列表框控件(DropDownPictureLi ...
- ef core2.2 mysql迁移问题
前段时间,遇到的是ef core mysql迁移的时候,bool类型会自动yingsheweishort的问题,需要手动更正一下今天测试的时候,遇到了MySQL数据表修改后迁移的问题. 问题详情如下 ...
- Html5知识精粹纪录
1. HTML5文档的正文结构及新元素 正文结构: <header> <nav> <section> <aside> <footer> 深入 ...
- JavaScript内置一些方法的实现原理--Object.freeze()、instanceof
const定义的常量,一般是不能修改的. 比如: const TIME_OUT = 10000; 但是当值为引用类型值时,还是可以操作对象,扩展或修改对象属性.方法等等. 以下演示代码的操作是不会报错 ...
- 【亲测有效】vs2017无法断点
解决方案: 一:设置为Debug模式 二:[工具]--[选项]--[调试]--[常规],取消打钩[要求源文件与原始版本完全匹配]
- 如何在SAP云平台ABAP编程环境里把CDS view暴露成OData服务
Jerry 2016年在学习SAP CDS view时,曾经写过一个CDS view的自学系列,其中有一篇提到了一个很方便的注解: @OData.publish: true 加上这个注解的CDS vi ...
- Vue学习官网和Vue的书籍 目录结构
Vue基础知识学习网站[中文] https://cn.vuejs.org/v2/guide/ Vue路由知识学习网站[中文] https://router.vuejs.org/zh/guide/ V ...
- npoi 实现类似excel、word自身的加密解密效果
最近在做一个文件管理系统,要求上传的excel.word.pdf 文件加密存在服务器上.在系统里下载可以不输密码直接打开,在服务器上点开文件必须要输密码.要考虑做好一劳永逸.也不能用收费的.以前没做过 ...
- Json:Restful
JArray & JObject JArray与JObject在json的应用:无需定义相应的类对象,直接解析 JArray jarr = JArray.Parse(jsonStr); //数 ...