传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1208

以后在空间限制允许的情况下我绝对不纠结内存占用问题啦!就因为不舍得用long long而用unsigned,爆掉了我好几个小时。

#include <cstdio>

const int maxn = 80005, delta[2] = {-1, 1}, mod = 1000000;

int n, t1, t2, s, ans;
int ch[maxn][2], fa[maxn], root, cnt = 2;
long long key[maxn], smaller, larger; inline void rotate(int x) {
int y = fa[x];
if (y == ch[fa[y]][0]) {
ch[fa[y]][0] = x;
}
else {
ch[fa[y]][1] = x;
}
fa[x] = fa[y];
int dir = x == ch[y][1];
ch[y][dir] = ch[x][dir ^ 1];
fa[ch[x][dir ^ 1]] = y;
ch[x][dir ^ 1] = y;
fa[y] = x;
}
inline void splay(int x) {
int p;
while (fa[x]) {
p = fa[x];
if (!fa[p]) {
rotate(x);
}
else {
if ((p == ch[fa[p]][1]) ^ (x == ch[p][1])) {
rotate(x);
}
else {
rotate(p);
}
rotate(x);
}
}
root = x;
}
inline void ist(int x, long long val) {
int p = 0, dir = 0;
while (x) {
p = x;
dir = val > key[x];
x = ch[x][dir];
}
++cnt;
ch[p][dir] = cnt;
fa[cnt] = p;
key[cnt] = val;
splay(cnt);
}
inline void del(long long val) {
int x = root;
while (key[x] != val) {
if (val < key[x]) {
x = ch[x][0];
}
else {
x = ch[x][1];
}
}
splay(x);
//注意:此题splay完这个x后,x绝对有两个孩子。
fa[ch[x][0]] = fa[ch[x][1]] = 0;
int i;
for (i = ch[x][0]; ch[i][1]; i = ch[i][1]);
splay(i);
ch[i][1] = ch[x][1];
fa[ch[x][1]] = i;
}
inline long long dayudengyu(long long val) {
int x = root;
long long rt = 0;
while (x && key[x] != val) {
if (val < key[x]) {
rt = key[x];
x = ch[x][0];
}
else {
x = ch[x][1];
}
}
return x? val: rt;
}
inline long long xiaoyu(long long val) {
int x = root;
long long rt = 0;
while (x) {
if (val <= key[x]) {
x = ch[x][0];
}
else {
rt = key[x];
x = ch[x][1];
}
}
return rt;
} int main(void) {
//freopen("in.txt", "r", stdin);
scanf("%d", &n);
key[1] = -999999999999999LL;
ch[1][1] = 2;
key[2] = 999999999999999LL;
fa[2] = 1;
root = 1;
while (n--) {
scanf("%d%d", &t1, &t2);
if (!s) {
ist(root, t2);
}
else {
if (t1 ^ (s < 0)) {
ist(root, t2);
}
else {
larger = dayudengyu(t2);
smaller = xiaoyu(t2);
if (larger - (long long)t2 < (long long)t2 - smaller) {
ans = (ans + ((larger - (long long)t2) % mod)) % mod;
del(larger);
}
else {
ans = (ans + (((long long)t2 - smaller) % mod)) % mod;
del(smaller);
}
}
}
s += delta[t1];
}
printf("%d\n", ans);
return 0;
}

  

_bzoj1208 [HNOI2004]宠物收养所【Splay】的更多相关文章

  1. Bzoj 1208: [HNOI2004]宠物收养所(splay)

    1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec Memory Limit: 162 MB Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收 ...

  2. 【BZOJ1208】[HNOI2004]宠物收养所 Splay

    还是模板题,两颗splay,找点删即可. #include <iostream> #include <cstdio> #include <cstdlib> #def ...

  3. [bzoj1208][HNOI2004]宠物收养所——splay

    题目大意 Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发 ...

  4. HNOI2004宠物收养所(splay维护二叉搜索树模板题)

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

  5. BZOJ 1208 [HNOI2004]宠物收养所 | SPlay模板题

    题目: 洛谷也能评 题解: 记录一下当前树维护是宠物还是人,用Splay维护插入和删除. 对于任何一次询问操作都求一下value的前驱和后继(这里前驱和后继是可以和value相等的),比较哪个差值绝对 ...

  6. BZOJ1208 [HNOI2004]宠物收养所 splay

    原文链接http://www.cnblogs.com/zhouzhendong/p/8085803.html 题目传送门 - BZOJ1208 题意概括 有两种数,依次加入. 规则为下: 如果当前剩余 ...

  7. BZOJ 1208: [HNOI2004]宠物收养所

    1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 7514  Solved: 2982[Submit][Sta ...

  8. 【BZOJ-1208】宠物收养所 Splay

    1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 6638  Solved: 2601[Submit][Sta ...

  9. 数据结构(set):COGS 62. [HNOI2004] 宠物收养所

    62. [HNOI2004] 宠物收养所 ★★★   输入文件:pet.in   输出文件:pet.out   简单对比时间限制:1 s   内存限制:128 MB 最近,阿Q开了一间宠物收养所.收养 ...

随机推荐

  1. 拷贝地图 CopyAndOverwriteMap()

    private void CopyAndOverwriteMap() { //Get IObjectCopy interface IObjectCopy objectCopy = new Object ...

  2. 实例 tar备份以日期命名

    tar备份以日期命名****************************************************************************************#v ...

  3. Rust 1.7.0 匹配器 match 的简介和使用

    使用过正則表達式的人应该都知道 matcher ,通过 matcher 匹配器运算正則表達式,完毕一系列的匹配规则. 在Rust 中 没有 switch 语句.matcher 就是 switch 的一 ...

  4. 数据结构-二叉树的遍历(类C语言描写叙述)

    遍历概念     所谓遍历(Traversal)是指沿着某条搜索路线.依次对树中每一个结点均做一次且仅做一次訪问.訪问结点所做的操作依赖于详细的应用问题. 遍历是二叉树上最重要的运算之中的一个,是二叉 ...

  5. HDFS的体系架构

    通过对Hadoop分布式计算平台最核心的分布式文件系统HDFS.MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase的介绍.基本涵盖了Hadoop分布式平台的全部技术核心. H ...

  6. 数据结构与算法问题 AVL二叉平衡树

    AVL树是带有平衡条件的二叉查找树. 这个平衡条件必须保持,并且它必须保证树的深度是O(logN). 一棵AVL树是其每一个节点的左子树和右子树的高度最多差1的二叉查找树. (空树的高度定义为-1). ...

  7. 2 Angular 2 的核心概念

    一.组件(Components): 组件是构成 Angular 应用的基础和核心,它是一个模板的控制类,用于处理应用和逻辑页面的视图部分.组件知道如何渲染自己及配置依赖注入,并通过一些由属性和方法组成 ...

  8. docker大全集

    1,什么是docker docker 最初是dotCloud公司创始人 Solomon Hykes 在法国期间发起的一个公司内部醒目,于 2013年 3 月以 Apache 2.0 授权协议开源, 主 ...

  9. HDU1114 Piggy-Bank —— DP 完全背包

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1114 Piggy-Bank Time Limit: 2000/1000 MS (Java/ ...

  10. try-with-resources使用示例

    try (InputStream is = new FileInputStream("test")) { is.read(); ... } catch(Exception e) { ...