洛谷传送门

这题真是恶心,一开始没理解题意。

原来如果有狗,狗就会存在收养场中,直到有人来领养;

  如果有人,人也会存在收养场中,直到有狗来被领养。

就是建一个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)的更多相关文章

  1. [HNOI2004]宠物收养场 Treap前驱后继

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

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

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

  3. 洛谷P2286 [HNOI2004]宠物收养场【Treap】题解+AC代码

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

  4. 宠物收养场 Treap

    宠物收养场 时间限制: 1 Sec  内存限制: 128 MB 题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠 ...

  5. P2286 [HNOI2004]宠物收养场

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

  6. LG_2286_[HNOI2004]宠物收养场

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

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

    链接:  https://www.lydsy.com/JudgeOnline/problem.php?id=1208 题面: 1208: [HNOI2004]宠物收养所 Time Limit: 10 ...

  8. 洛谷P2286 [HNOI2004]宠物收养场

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

  9. 洛谷 P2286 [HNOI2004]宠物收养场

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

  10. [HNOI2004]宠物收养场 BZOJ1208 splay tree

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

随机推荐

  1. AJPFX浅谈Java 性能优化之字符串过滤实战

    ★一个简单的需求 首先描述一下需求:给定一个 String 对象,过滤掉除了数字(字符'0'到'9')以外的其它字符.要求时间开销尽可能小.过滤函数的原型如下: String filter(Strin ...

  2. [转]java注解与APT技术

    下面是一个简单的自定义注解的栗子: package annotation; import java.lang.annotation.Documented; import java.lang.annot ...

  3. checkbox:click事件触发span元素内容改变

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. Android RxJava小结

    一.如何使用 在build.gradle中添加依赖 dependencies { api 'io.reactivex:rxandroid:1.2.1' api 'io.reactivex:rxjava ...

  5. 洛谷 大牛分站 P1000 超级玛丽游戏

    题目背景 本题是洛谷的试机题目,可以帮助了解洛谷的使用. 建议完成本题目后继续尝试P1001.P1008. 题目描述 超级玛丽是一个非常经典的游戏.请你用字符画的形式输出超级玛丽中的一个场景. *** ...

  6. codevs 1043 方格取数 2000年NOIP全国联赛提高组

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description 设有N*N的方格图(N<=10,我们将其中的某些方格中填入正整数,而 ...

  7. (转)Spring4.2.5+Hibernate4.3.11组合开发

    http://blog.csdn.net/yerenyuan_pku/article/details/52887573 搭建和配置Spring与Hibernate整合的环境 今天我们来学习Spring ...

  8. Spring事务管理全面分析

    Spring 事务属性分析什么是事物  事务管理对于企业应用而言至关重要.它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台数据的完整性.就像银行的自助取款机,通常都能正常 ...

  9. 关于Ubuntu 16.04中E: Could not get lock /var/lib/dpkg/lock - open的三种解决方案

    问题 在Ubuntu中,有时候运用sudo  apt-get install 安装软件时,会出现如下的情况: E: Could not get lock /var/lib/dpkg/lock - op ...

  10. Linux-RedHat7.2 安装.net core2.0

    1.添加dotnet产品Feed sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc sudo sh -c 'ech ...