_bzoj1208 [HNOI2004]宠物收养所【Splay】
传送门: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】的更多相关文章
- Bzoj 1208: [HNOI2004]宠物收养所(splay)
1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec Memory Limit: 162 MB Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收 ...
- 【BZOJ1208】[HNOI2004]宠物收养所 Splay
还是模板题,两颗splay,找点删即可. #include <iostream> #include <cstdio> #include <cstdlib> #def ...
- [bzoj1208][HNOI2004]宠物收养所——splay
题目大意 Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发 ...
- HNOI2004宠物收养所(splay维护二叉搜索树模板题)
描述 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特殊的公式,得出该领 ...
- BZOJ 1208 [HNOI2004]宠物收养所 | SPlay模板题
题目: 洛谷也能评 题解: 记录一下当前树维护是宠物还是人,用Splay维护插入和删除. 对于任何一次询问操作都求一下value的前驱和后继(这里前驱和后继是可以和value相等的),比较哪个差值绝对 ...
- BZOJ1208 [HNOI2004]宠物收养所 splay
原文链接http://www.cnblogs.com/zhouzhendong/p/8085803.html 题目传送门 - BZOJ1208 题意概括 有两种数,依次加入. 规则为下: 如果当前剩余 ...
- BZOJ 1208: [HNOI2004]宠物收养所
1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 7514 Solved: 2982[Submit][Sta ...
- 【BZOJ-1208】宠物收养所 Splay
1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 6638 Solved: 2601[Submit][Sta ...
- 数据结构(set):COGS 62. [HNOI2004] 宠物收养所
62. [HNOI2004] 宠物收养所 ★★★ 输入文件:pet.in 输出文件:pet.out 简单对比时间限制:1 s 内存限制:128 MB 最近,阿Q开了一间宠物收养所.收养 ...
随机推荐
- FDMemTable的详细使用方法
unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Var ...
- ArcGIS10.x Engine直连提示连接超时ORA-12170 来自:http://www.iarcgis.com/?p=1004
导语 随着Esri大力宣传直连,用户也越来越由服务连接,改为直连,当然ArcGIS Engine开发用户也不例外. 环境 Oracle数据库,ArcGIS版本不限,不过由于9版本多以服务连接,以10版 ...
- 使用图像扫描控件ScanOnWeb实现在线图像扫描
今天上网查资料,看到一篇文章,描述的是一个开发OA软件的公司解决浏览器嵌入式扫描仪编程的文章,文章描述了改OA厂商的工程师如何辛苦的克服了各种技术难题,最终实现了在线图像扫描处理,然后又在无数个不眠的 ...
- grails的criteria和hql查询
grails在查询方面也保留了hibernate的hql和criteria查询功能.hql自然不必多说基本不会有什么变化,grails的criteria查询在hibernate上面做了微调使用起来更加 ...
- 巧用Drawable 实现Android UI 元素间距效果
源文地址: 巧用Drawable 实现Android UI 元素间距效果 在大部分的移动UI或者Web UI都是基于网格概念而设计的.这种网格一般都是有一些对其的方块组成,然后它们组合成为一个块.使用 ...
- CSDN管理员看过来
CSDN管理员看过来 你好.CSDN管理员,我想我被特殊对待了.我看了一些人的博客.终于发现仅仅有我博客的数据有异常.这算是给我的惊喜吗? 言归正传,我发现我博客上两个地方出现的文章的总数对不上.原创 ...
- 3.NetDh框架之缓存操作类和二次开发模式简单设计(附源码和示例代码)
前言 NetDh框架适用于C/S.B/S的服务端框架,可用于项目开发和学习.目前包含以下四个模块 1.数据库操作层封装Dapper,支持多种数据库类型.多库实例,简单强大: 此部分具体说明可参考博客: ...
- Blocks实现代理传值
一.RootViewController: #import "RootViewController.h" #import "SecondViewController.h& ...
- Hadoop 解除 “Name node is in safe mode”
运行Hadoop程序时,有时候会报以下错误: org.apache.hadoop.dfs.SafeModeException: Cannot delete /user/hadoop/input. N ...
- 使用ADO.NET对SQL Server数据库进行訪问
在上一篇博客中我们给大家简介了一下VB.NET语言的一些情况,至于理论知识的学习我们能够利用VB的知识体系为基础.再将面向对象程序设计语言的知识进行融合便可进行编程实战. 假设我们须要訪问一个企业关系 ...