BZOJ1208 [HNOI2004]宠物收养所 splay
原文链接http://www.cnblogs.com/zhouzhendong/p/8085803.html
题目传送门 - BZOJ1208
题意概括
有两种数,依次加入。
规则为下:
如果当前剩余的为同种数(或者没有数字),那么直接加入该数。
否则找到与剩余的数中与当前数差的绝对值最小的(如果有多个一样小的,选择原值最小的),然后ans+=abs(差),并把这两个数都弄没。
题解
splay裸题。
代码
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <cmath>
using namespace std;
const int N=80005,mod=1000000;
int fa[N],son[N][2],val[N],root,total=0;
void spt_clear(){
root=total=0;
memset(fa,0,sizeof fa);
memset(son,0,sizeof son);
}
int wson(int x){
return son[fa[x]][1]==x;
}
void rotate(int x){
if (fa[x]==0)
return;
int y=fa[x],z=fa[y],L=wson(x),R=L^1;
if (z)
son[z][wson(y)]=x;
fa[x]=z,fa[y]=x,fa[son[x][R]]=y;
son[y][L]=son[x][R],son[x][R]=y;
}
void splay(int x,int rt){
if (!x)
return;
if (!rt)
root=x;
for (int y=fa[x];fa[x];rotate(x),y=fa[x])
if (fa[y])
rotate(wson(x)==wson(y)?y:x);
}
int findpre(int v,int rt){
if (!rt)
return 0;
if (v==val[rt])
return rt;
if (v>val[rt]){
int x=findpre(v,son[rt][1]);
return x?x:rt;
}
return findpre(v,son[rt][0]);
}
int findpre(int v){
int res=findpre(v,root);
splay(res,0);
return res;
}
int findnxt(int v,int rt){
if (!rt)
return 0;
if (v==val[rt])
return rt;
if (v<val[rt]){
int x=findnxt(v,son[rt][0]);
return x?x:rt;
}
return findnxt(v,son[rt][1]);
}
int findnxt(int v){
int res=findnxt(v,root);
splay(res,0);
return res;
}
int find(int v,int rt){
if (!rt)
return 0;
if (v==val[rt])
return rt;
return find(v,son[rt][v>val[rt]]);
}
int findmax(int rt){
return son[rt][1]?findmax(son[rt][1]):rt;
}
void insert(int v,int &x,int pre){
if (x)
return insert(v,son[x][v>val[x]],x);
fa[x=++total]=pre,val[x]=v;
splay(x,0);
}
void erase(int v){
int x=find(v,root),rt;
splay(x,0);
if (!son[x][0]&&!son[x][1])
return spt_clear();
if (!son[x][0]||!son[x][1]){
int &s=son[x][(bool)son[x][1]];
fa[root=s]=0;
s=0;
return;
}
rt=findmax(son[x][0]);
son[x][0]=fa[son[x][0]]=0;
splay(rt,0);
fa[son[rt][1]=son[x][1]]=rt;
son[x][1]=0;
}
int n,op,v,ans=0,nowop;
int main(){
spt_clear();
scanf("%d",&n);
for (int i=1;i<=n;i++){
scanf("%d%d",&op,&v);
if (root==0){
nowop=op;
insert(v,root,0);
continue;
}
if (op==nowop)
insert(v,root,0);
else {
int pre=findpre(v),nxt=findnxt(v),cv;
if (!pre)
cv=val[nxt];
else if (!nxt)
cv=val[pre];
else
cv=abs(val[nxt]-v)<abs(v-val[pre])?val[nxt]:val[pre];
ans=(ans+abs(v-cv))%mod;
erase(cv);
}
}
printf("%d",ans);
return 0;
}
BZOJ1208 [HNOI2004]宠物收养所 splay的更多相关文章
- [bzoj1208][HNOI2004]宠物收养所——splay
题目大意 Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发 ...
- BZOJ1208 HNOI2004 宠物收养所 【非旋转Treap】
BZOJ1208 HNOI2004 宠物收养所 Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的 ...
- 【BZOJ-1208】宠物收养所 Splay
1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 6638 Solved: 2601[Submit][Sta ...
- Bzoj 1208: [HNOI2004]宠物收养所(splay)
1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec Memory Limit: 162 MB Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收 ...
- bzoj1208 [HNOI2004]宠物收养所(STL,Treap)
1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 5956 Solved: 2317[Submit][Sta ...
- 2018.07.06 BZOJ1208: HNOI2004宠物收养所(非旋treap)
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]宠物收养所
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 7457 Solved: 2960 Description 最近,阿Q开了一间宠物收养所.收养所提供两 ...
- HNOI2004宠物收养所(splay维护二叉搜索树模板题)
描述 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特殊的公式,得出该领 ...
随机推荐
- Sublime Text3 C++ 设置
系统环境: 首先是 C++ 的环境设置, 先下载 CodeBlocks, 安装目录下有 MinGW, 直接复制到 C 盘下, 再在电脑中添加 环境变量(PATH). Sublime Text3 设置: ...
- mvc session设置时间不起作用
调整的方式是在项目的Web.config中进行配置,如下方式可以调整为120分钟. <system.web> <sessionState mode=" /> < ...
- layui 左侧三级菜单栏
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- hive学习05 参数设置
001参数设置 hive执行命令的本质是mapreduce,当然也可以作为关系型数据库进行查询 --设置一个job有多少个reducer处理,依据多少的是文件的大小,默认1G set hive.exe ...
- 清北学堂 清北-Day1-R2-监听monitor
题目描述 [背景] 不阅读本题的[背景]并不影响通过本题. 三体信息中没有包含对三体⼈⽣物形态的任何描述,⼈类要在四百多年以后才能真正看到三体⼈.在阅读信息时,叶⽂洁只能把三体⼈想象成⼈类的形象. 1 ...
- Confluence 6 通过 SSL 或 HTTPS 运行 - 备注和问题解决
备注 在创建证书时候的背景信息: 'keytool -genkeypair' 命令将会创建秘钥对,包括公钥和关联的私钥,然后存储到 keystore 中.这个命令打包公钥为 X.509 v3 自签 ...
- 第七篇 python基础之函数,递归,内置函数
一 数学定义的函数与python中的函数 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因 ...
- LeetCode(104):二叉树的最大深度
Easy! 题目描述: 给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点的节点. 示例:给定二叉树 [3,9,20,null, ...
- 【深度学习】吴恩达网易公开课练习(class1 week4)
概要 class1 week3的任务是实现单隐层的神经网络代码,而本次任务是实现有L层的多层深度全连接神经网络.关键点跟class3的基本相同,算清各个参数的维度即可. 关键变量: m: 训练样本数量 ...
- getComputedStyle()用法详解
那如果元素即没有在style属性中设置宽高,也没有在样式表中设置宽高,还能用getComputedStyle或currentStyle获取吗?答案是getComputedStyle可以,current ...