[HNOI2004]宠物收养场(Treap)
这题真是恶心,一开始没理解题意。
原来如果有狗,狗就会存在收养场中,直到有人来领养;
如果有人,人也会存在收养场中,直到有狗来被领养。
就是建一个treap,狗来把狗插进去,人来后把狗领养完,多余的人就存在treap里,等狗来。
#include <cstdio>
#include <cstdlib>
#include <cmath> using namespace std; int n, root, tot, pre, suc, flag = -, ans;
int son[][], size[], rnd[], w[]; inline void turn(int &k, int x)
{
int t = son[k][x];
son[k][x] = son[t][x ^ ];
son[t][x ^ ] = k;
size[t] = size[k];
size[k] = size[son[k][]] + size[son[k][]] + ;
k = t;
} inline void insert(int &k, int x)
{
if(!k)
{
k = ++tot;
w[k] = x;
rnd[k] = rand();
size[k] = ;
return;
}
size[k]++;
if(w[k] < x)
{
insert(son[k][], x);
if(rnd[k] > rnd[son[k][]]) turn(k, );
}
else
{
insert(son[k][], x);
if(rnd[k] > rnd[son[k][]]) turn(k, );
}
} inline void get_pre(int k, int x)
{
if(!k) return;
if(w[k] > x) get_pre(son[k][], x);
else pre = k, get_pre(son[k][], x);
} inline void get_suc(int k, int x)
{
if(!k) return;
if(w[k] < x) get_suc(son[k][], x);
else suc = k, get_suc(son[k][], x);
} inline void del(int &k, int x)
{
if(!k) return;
if(w[k] == x)
{
if(son[k][] * son[k][] == ) k = son[k][] + son[k][];
else if(rnd[son[k][]] < rnd[son[k][]]) turn(k, ), del(k, x);
else turn(k, ), del(k, x);
}
else
{
size[k]--;
if(w[k] > x) del(son[k][], x);
else del(son[k][], x);
}
} int main()
{
int i, a, b, x;
scanf("%d", &n);
for(i = ; i <= n; i++)
{
scanf("%d %d", &a, &b);
if(flag == a) insert(root, b);
else
{
if(size[root])
{
pre = , get_pre(root, b);
suc = , get_suc(root, b);
if(!pre || !suc) x = pre + suc;
else if(b - w[pre] <= w[suc] - b) x = pre;
else x = suc;
ans = (ans + abs(w[x] - b)) % ;
del(root, w[x]);
}
else flag = a, insert(root, b);
}
}
printf("%d", ans);
return ;
}
[HNOI2004]宠物收养场(Treap)的更多相关文章
- [HNOI2004]宠物收养场 Treap前驱后继
凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的一个特殊的公式,得出该领养者希望领 ...
- BZOJ1208[HNOI2004]宠物收养场——treap
凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的一个特殊的公式,得出该领养者希望领 ...
- 洛谷P2286 [HNOI2004]宠物收养场【Treap】题解+AC代码
题目传送门啦~啦~啦~ 题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的 ...
- 宠物收养场 Treap
宠物收养场 时间限制: 1 Sec 内存限制: 128 MB 题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠 ...
- P2286 [HNOI2004]宠物收养场
题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的一个特殊的公式,得出该领 ...
- LG_2286_[HNOI2004]宠物收养场
题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的一个特殊的公式,得出该领 ...
- bzoj 1208: [HNOI2004]宠物收养所 (Treap)
链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1208 题面: 1208: [HNOI2004]宠物收养所 Time Limit: 10 ...
- 洛谷P2286 [HNOI2004]宠物收养场
题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的一个特殊的公式,得出该领 ...
- 洛谷 P2286 [HNOI2004]宠物收养场
题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的一个特殊的公式,得出该领 ...
- [HNOI2004]宠物收养场 BZOJ1208 splay tree
题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的一个特殊的公式,得出该领 ...
随机推荐
- c#很好用的定时器Quartz--含附件
1.引用附件中的两个DLL 2.创建类 public class QuartzJob:IStatefulJob { private static ISchedulerFactory factory = ...
- 迭代器———更锋利的C#代码小记(3)
直接使用yield return关键字通过类似返回值的方式灵活地构造迭代器 public class EmployeeCollection :IEnumerable<Employee> { ...
- 虚方法(virtual)
虚方法(virtual) Virtual 关键字用于修饰方法.属性.索引器或事件声明,并且允许在派生类中重写这些对象. 看一段代码: using System ; class A { public v ...
- Lumia 刷机(强刷)Message send failed解决办法
强刷可以救砖,不需要验证地区code,可以跨刷其它国家/地区的固件,但不是所有机型都可以这样,Lumia 620是支持跨刷的. 看本文你首先要知道使用Nokia Care Suite强刷的步骤,参考从 ...
- AJPFX总结java开发常用类(包装,数字处理集合等)(二)
二:进军集合类 集合其实就是存放对象的容器,专业点说就是集合是用来存储和管理其他对象的对象,即对象的容器.集合可以扩容,长度可变,可以存储多种类型的数据,而数组长度不可变,只能存储单一类型的元素 用一 ...
- 死磕 java并发包之AtomicInteger源码分析
问题 (1)什么是原子操作? (2)原子操作和数据库的ACID有啥关系? (3)AtomicInteger是怎么实现原子操作的? (4)AtomicInteger是有什么缺点? 简介 AtomicIn ...
- String.format()【示例详解】
String.format()[示例详解] 整理者:Vashon 前言: String.format 作为文本处理工具,为我们提供强大而丰富的字符串格式化功能,为了不止步于简单调用 String.fo ...
- OCP 11g 第一章练习
练习 1-1 研究所在环境的DBMS 这是一个书面练习,没有具体的解决方案. 确定自己所在环境使用的应用程序, 应用服务器 , 和数据库. 然后集中精力研究数据库, 体验一下数据库的规模和忙碌程度. ...
- mysql use index() 优化查询
mysql use index() 优化查询 FORCE INDEX/IGNORE INDEX 的语法: SELECT *** FROM TABLE [{USE|IGNORE|FORCE} INDEX ...
- apropos命令
apropos——查看配置文件功能 示例1: # apropos ifconfig 显示ifconfig配置文件的功能,类似于执行man命令时的NAME信息