[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
题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的一个特殊的公式,得出该领 ...
随机推荐
- DNS练习之反向解析
环境同正向解析一样. 切换到/var/named/chroot/etc目录下: 编辑named.rfc1912.zones文件,在末尾添加如下内容: [root@sishen63 etc]# vim ...
- 在nginx上部署vue项目(history模式)--demo实列;
在很早之前,我写了一篇 关于 在nginx上部署vue项目(history模式) 但是讲的都是理论,所以今天做个demo来实战下.有必要让大家更好的理解,我发现搜索这类似的问题还是挺多的,因此在写一篇 ...
- XSS漏洞解析(二)
上篇我们讲了XSS的一些相关的内容,这篇我们就直接上代码demo解决实际问题吧. 主要的问题是xssfilter的编写,我们直接去网上找一下框架,一般有js,php,java等语言都有相关的XSS的相 ...
- 浅谈 echarts 用法
对于服务型的公司来说,需要了解用户的使用趋势,来帮助分析市场的走向,所以说统计在一个管理后台中是必不可少的. 会用到echarts插件 ,其官网网址 http://echarts.baidu.com/ ...
- js的本质、全局属性
一.js的本质 1.js的本质就是处理数据, 数据来自于后台数据库, 所以变量就起到一个临时数据的作用 Ecmascript 制定了js的数据类型 2.数据类型有哪些? 字符串(string).数字( ...
- Git-远程操作
远程分支:远程跟踪分支remote branch是对远程分支状态的引用,是不能移动的,它会根据远程分支变化以及网络通信自动移动.Git服务器包含了远程分支master,在My Computer中的re ...
- 亲身经历,Java面试题整理
博主在2015年暑期参加过一些Java开发工程师实习的面试和笔试,在此将重点整理出来,以供大家学习. 资料1: 一.单继承 1.1Java类是否支持多重继承? 答:继承的基本原则是: 子类继承父类的所 ...
- filter和map的使用
if ( this.dataAggridvue.filter( item => item.Accepted == true && item.InvoiceGroupCode != ...
- EOS Dapp体验报告
EOS Dapp体验报告 EOS通过并行链和DPOS的方式解决了延迟和数据吞吐量的难题. EOS能够实现每秒百万级的处理量,而目前比特币是每秒7笔,以太坊是30-40笔,EOS的这一超强能力吊打比特币 ...
- 再遇BGP
第一次遇到BGP,是在大学的课堂上,现在再次看到它,有种深深的无奈,我只记得它的名字,忘记了它的样子. 那么什么是BGP呢? 翻译过来就是边界网关协议,一个用来网络数据进行选路的路由协议,使用TCP协 ...