洛谷传送门

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

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

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

就是建一个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. python_函数进阶(5)

    第1章 函数有用信息1.1 login.__doc__1.2 login.__name__第2章 装饰器的进阶2.1 带参数的装饰器2.2 多个装饰器装饰一个函数2.3 开放封闭原则 第3章 可迭代对 ...

  2. Web service简介 与servletContext的参数

    Web service顾名思义是基于web的服务,它是一种跨平台,跨语言的服务. 我们可以这样理解它,比如说我们可以调用互联网上查询天气信息的web服务,把它嵌入到我们的B/S程序中,当用户从我们的网 ...

  3. P2955 [USACO09OCT]奇数偶数Even? Odd?

    题目描述 Bessie's cruel second grade teacher has assigned a list of N (1 <= N <= 100) positive int ...

  4. CF778B(round 402 div.2 E) Bitwise Formula

    题意: Bob recently read about bitwise operations used in computers: AND, OR and XOR. He have studied t ...

  5. el-select,选择一行,取值行的对象.

      <el-select v-model="set_invoice_form.InvoiceType" placeholder="请选择" :disabl ...

  6. whereis参数

    -b  只找二进制文件 -m 只找在帮助文件manual路径下的文件 -s 只找原文件 -u 没有帮助文件的文件 whereis passwd

  7. IOS代码收集

    http://mobile.51cto.com/hot-410417.htm 退回输入键盘: - (BOOL) textFieldShouldReturn:(id)textField{ [textFi ...

  8. 洛谷 P2604 [ZJOI2010]网络扩容

    题目描述 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用.求: 1. 在不扩容的情况下,1到N的最大流: 2. 将1到N的最大流增加K所需的最小扩容费用. ...

  9. C++#pragma pack指令

    微软官方文档说#pragma pack 指令的作用是为结构.联合和类成员指定 pack 对齐.的主要作用就是改变编译器的内存对齐方式,这个指令在网络报文的处理中有着重要的作用,#pragma pack ...

  10. 7-Java-C(冰雹数)

    题目描述: 任意给定一个正整数N, 如果是偶数,执行: N / 2 如果是奇数,执行: N * 3 + 1 生成的新的数字再执行同样的动作,循环往复. 通过观察发现,这个数字会一会儿上升到很高, 一会 ...