传送门: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. Android实战简易教程-第三十九枪(第三方短信验证平台Mob和验证码自己主动填入功能结合实例)

    用户注冊或者找回password时通常会用到短信验证功能.这里我们使用第三方的短信平台进行验证实例. 我们用到第三方短信验证平台是Mob,地址为:http://mob.com/ 一.注冊用户.获取SD ...

  2. Meteor教程

    Meteor 是一个构建在 Node.js 之上的平台,用来开发实时网页程序.Meteor 程序位于数据库和用户界面之间,保持二者之间的数据同步更新. 因为 Meteor 是基于 Node.js 开发 ...

  3. 【网络】TCP协议

    一.概述 主要特点: 1)面向连接的运输层协议 2)每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一) 3)TCP提供可靠交付的服务 4)TCP提供全双工通信 5)面向字节流:T ...

  4. 【Nginx】Nginx基础架构

    调用HTTP模块的流程: Worker进程会在一个for循环语句中反复调用事件模块检测网络事件.当事件模块检测到某个客户端发起的TCP请求时(接收到SYN包),将会为它建立TCP连接,成功建立连接后根 ...

  5. volatile关键字解析&内存模型&并发编程中三概念

    原文链接: http://www.cnblogs.com/dolphin0520/p/3920373.html volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java5之前,它是一个 ...

  6. win8系统 如何默认显示文件扩展名和显示隐藏文件

    装一个魔方软件,然后再任意文件或者文件夹上面右击,依次点击下面两项,就可以默认显示文件扩展名和显示隐藏文件  

  7. ansible学习之--简单学习笔记1

    1.利用dm-crypt来创建加密文件系统.编写shell脚本(安装和卸载两个shell脚本) 2.编写ansible,playbook文件 3.编写python脚本 首先编写shell脚本 inst ...

  8. AWK教程

    1. IBM:GAWK入门:AWK语言基础 2. Unix AWK使用手册 3. 台湾中研院计算中心ASPAC计划之AWK程序介绍 4. Study-area之AWK 5. AWK学习笔记——酷勤 持 ...

  9. 使用Java对100以内偶数求和

    /** * 根据for循环的描述: for(变量初始化:循环条件:修改循环变量的值),求出100以内的所有偶数,for(int i = 0; i<=100; i+=2),把这些偶数累加到一个空的 ...

  10. BZOJ 3550 ONTAK2010 Vacation 单纯形

    题目大意:给定一个长度为3n的区间.要求选一些数,且随意一段长度为n的区间内最多选k个数.求选择数的和的最大值 单纯形直接搞 注意一个数仅仅能被选一次 因此要加上xi<=1这个约束条件 不明确3 ...