[HNOI2004]宠物收养场 Treap前驱后继
输入
输出
样例输入
样例输出
提示
最后一个领养者没有宠物可以领养。
题解:
裸的Treap找前驱后继,本蒟蒻开了两个平衡树,如果宠物Treap为空就在人的Treap里插人,人的Treap就在宠物的Treap里插宠物。
加一些判断再套个模版就ok了.
具体看代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<ctime>
#include<cstdlib>
using namespace std;
typedef long long ll;
const int mod=;
const int N=;
struct node
{
node *child[];
int x,lev;
}a[N];
node *pos,*root[];
int size[];ll ans=;
int gi()
{
int str=;char ch=getchar();
while(ch>''||ch<'')ch=getchar();
while(ch>='' && ch<='')str=str*+ch-'',ch=getchar();
return str;
} void newnode(node *&r,int key)
{
r=pos++;
r->child[]=r->child[]=NULL;
r->lev=rand();
r->x=key;
}
int pre,nxt;
void rotate(node *&r,bool t)//0 ->left 1 ->right
{
node *y=r->child[!t];
r->child[!t]=y->child[t];
y->child[t]=r;
r=y;
}
void insert(node *&r,int key)
{
if(r==NULL){newnode(r,key);return;}
bool t=r->x<key;
insert(r->child[t],key);
if(r->child[t]->lev>r->lev)rotate(r,!t);
}
void getspre(node *&r,int key)
{
if(r==NULL)return ;
if(r->x>key)getspre(r->child[],key);
else pre=r->x,getspre(r->child[],key);
} void getnext(node *&r,int key)
{
if(r==NULL)return ;
if(r->x<key)getnext(r->child[],key);
else nxt=r->x,getnext(r->child[],key);
} void Delet(node *&r,int key)
{
if(r==NULL)return ;
if(r->x==key)
{
if(r->child[] && r->child[])
{
bool t=r->child[]->lev<r->child[]->lev;
rotate(r,t);
Delet(r->child[t],key);
}
else
{
if(r->child[])r=r->child[];
else r=r->child[];
}
}
else Delet(r->child[key>r->x],key);
}
int main()
{
pos=a;
int n,x,y;
n=gi();
for(int i=;i<=n;i++)
{
x=gi();y=gi();
if(size[!x]==)
{
size[x]++;
insert(root[x],y);
}
else
{
pre=nxt=-;
getnext(root[!x],y);getspre(root[!x],y);
size[!x]--;
if(pre!=- && nxt!=-)
{
if(y-pre<=nxt-y){
ans+=y-pre;ans%=mod;
Delet(root[!x],pre);
}
else{
ans+=nxt-y;ans%=mod;
Delet(root[!x],nxt);
}
}
else
{
if(pre!=-){
ans+=y-pre;ans%=mod;
Delet(root[!x],pre);
}
else{
ans+=nxt-y;ans%=mod;
Delet(root[!x],nxt);
}
}
}
}
cout<<ans;
return ;
}
[HNOI2004]宠物收养场 Treap前驱后继的更多相关文章
- BZOJ1208[HNOI2004]宠物收养场——treap
凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的一个特殊的公式,得出该领养者希望领 ...
- 洛谷P2286 [HNOI2004]宠物收养场【Treap】题解+AC代码
题目传送门啦~啦~啦~ 题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的 ...
- 宠物收养场 Treap
宠物收养场 时间限制: 1 Sec 内存限制: 128 MB 题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠 ...
- P2286 [HNOI2004]宠物收养场
题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的一个特殊的公式,得出该领 ...
- 洛谷P2286 [HNOI2004]宠物收养场
题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的一个特殊的公式,得出该领 ...
- 洛谷 P2286 [HNOI2004]宠物收养场
题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的一个特殊的公式,得出该领 ...
- [HNOI2004]宠物收养场 BZOJ1208 splay tree
题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的一个特殊的公式,得出该领 ...
- LG_2286_[HNOI2004]宠物收养场
题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的一个特殊的公式,得出该领 ...
- bzoj 1208: [HNOI2004]宠物收养所 (Treap)
链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1208 题面: 1208: [HNOI2004]宠物收养所 Time Limit: 10 ...
随机推荐
- Java 字符流操作
上篇文章Java 字节流操作介绍了java中基本的字节流操作,但是我们常常对于字符操作,如果使用字节流来实现输入输出就显得麻烦,我们可以使用字符流来实现对我们看得见的字符char进行操作,主要内容如下 ...
- 使用slice和concat对数组的深拷贝和浅拷贝
一.数组浅拷贝 在使用JavaScript对数组进行操作的时候,我们经常需要将数组进行备份. 如下代码,如果只是简单才用赋值的方法,那么我们只要更改其中的任何一个,然后其他的也会跟着改变,这就导致了问 ...
- java日期处理函数
java中获取本年第一天的日期 public static Timestamp getYearFirstDay() { Calendar calendar = Calendar.getInstance ...
- (3)简单说说java中的异常体系
java异常体系 |--Throwable 实现类描述java的错误和异常 一般交由硬件处理 |--Error(错误)一般不通过代码去处理,一般由硬件保护 |--Exception(异常) |--Ru ...
- Spring:利用PerformanceMonitorInterceptor来协助应用性能优化
前段时间对公司产品做性能优化,如果单依赖于测试,进度就会很慢.所以就通过对代码的方式来完成,并以此来加快项目进度.具体的执行方案自然就是要知道各个业务执行时间,针对业务来进行优化. 因为项目中使用了S ...
- Python全栈开发第14天
字符编码 python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill) ASCII(American Standard Code for Information Interc ...
- Nagios安装部署
p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; line-height: 150%; fon ...
- Diary of Codeforces Round #402 (Div. 2)
这一场的表现可以用"全程智障"4个字,生动传神地描述出来. About 写题: A. 写了一堆if比较大小, 这很勤勉.(绝对值君对自己の存在感为0表示很难过.) B. 题,直接读 ...
- Java面试步步走
一.Java 基础 1.Java 集合原理 2.Java 多线程.同步集合.并发集合.阻塞队列.线程池.各种锁等 3.JVM 垃圾回收机制.JVM 引用类型.JVM 内存模型 二.应用技术基础 1)数 ...
- jdk源码剖析:Synchronized
开启正文之前,先说一下源码剖析这一系列,就以"死磕到底"的精神贯彻始终,最少追踪到JVM指令(再往下C语言实现了). =========正文分割线=========== Sync ...