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根据领养者的要求通过他自己发明的一个特殊的公式,得出该领 ...
随机推荐
- oracle加密传输
参考文章: http://blog.itpub.net/24052272/viewspace-2129175/ oracle在传输过程中,正常是明文传输的,例如SQL以及执行的结果. 看看做的测试: ...
- Golang并发模型之Context详解
对于 Golang 开发者来说context(上下文)包一定不会陌生.但很多时候,我们懒惰的只是见过它,或能起到什么作用,并不会去深究它. 应用场景:在 Go http 包的 Server 中,每一个 ...
- css之relative
一.relative对absolute的限制作用 1.限制left/top/right/bottom定位.absolute默认是在也没的左上角,当父类设定为relative,absolute就被限制在 ...
- 爬虫----模拟用户登录gitHub
#第二次请求:带着初始cookie和TOKEN发送POST请求给登录页面,带上账号密码 data={ 'commit':'Sign in', 'utf8':'✓', 'authenticity_tok ...
- add web server(nginx)
#!/bin/bash # # Web Server Install Script # Last Updated 2012.09.24 # ##### modify by WanJie 2012.09 ...
- 饮冰三年-人工智能-linux-09 服务
1:SSH服务(提供远程连接服务) 客户端使用Xshell 链接成功 加快连接速度 关闭防火墙 2:apache 服务(提供网页服务) 2.0 准备环境 关闭防火墙:service iptables ...
- Java+selenium之WebDriver定位页面元素(二)
Selenium-Webdriver 提供了强大的元素定位方法,支持以下三种方法: 单个对象的定位方法,多个对象的定位方法和层级定位 1. 定位单个元素 // 对于元素的属性包含 id 的情况适用,推 ...
- linux基础练习题(3)
关卡三 练习题 在家路径下创建A文件夹 在上一步创建的A文件夹中,创建B/C/D文件夹 在上一步所在的路径中,创建C/E/F文件夹 使用目录树查看文件夹结构 A/B/C中创建一个hello.py文件 ...
- 最短路径问题---Dijkstra算法详解
侵删https://blog.csdn.net/qq_35644234/article/details/60870719 前言 Nobody can go back and start a new b ...
- Asp.Net MVC Ajax轮训解决Session失效时间
这种方法不是太好,对服务器得压力大,由于系统是内部人员使用,业务有比较复杂,所以有些值得需要Session去保存,但是,Session有失效时间. 代码如下: $(function () { func ...