1208: [HNOI2004]宠物收养所

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 7589  Solved: 3009
[Submit][Status][Discuss]

Description

最近,阿Q开了一间宠物收养所。收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物。每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特殊的公式,得出该领养者希望领养的宠物的特点值a(a是一个正整数,a<2^31),而他也给每个处在收养所的宠物一个特点值。这样他就能够很方便的处理整个领养宠物的过程了,宠物收养所总是会有两种情况发生:被遗弃的宠物过多或者是想要收养宠物的人太多,而宠物太少。
1.
被遗弃的宠物过多时,假若到来一个领养者,这个领养者希望领养的宠物的特点值为a,那么它将会领养一只目前未被领养的宠物中特点值最接近a的一只宠物。(任何两只宠物的特点值都不可能是相同的,任何两个领养者的希望领养宠物的特点值也不可能是一样的)如果有两只满足要求的宠物,即存在两只宠物他们的特点值分别为a-b和a+b,那么领养者将会领养特点值为a-b的那只宠物。
2.
收养宠物的人过多,假若到来一只被收养的宠物,那么哪个领养者能够领养它呢?能够领养它的领养者,是那个希望被领养宠物的特点值最接近该宠物特点值的领养者,如果该宠物的特点值为a,存在两个领养者他们希望领养宠物的特点值分别为a-b和a+b,那么特点值为a-b的那个领养者将成功领养该宠物。

一个领养者领养了一个特点值为a的宠物,而它本身希望领养的宠物的特点值为b,那么这个领养者的不满意程度为abs(a-b)。【任务描述】你得到了一年当中,领养者和被收养宠物到来收养所的情况,希望你计算所有收养了宠物的领养者的不满意程度的总和。这一年初始时,收养所里面既没有宠物,也没有领养者。

Input

第一行为一个正整数n,n<=80000,表示一年当中来到收养所的宠物和领养者的总数。接下来的n行,按到来时间的先后顺序描述了一年当中来到收养所的宠物和领养者的情况。每行有两个正整数a,

b,其中a=0表示宠物,a=1表示领养者,b表示宠物的特点值或是领养者希望领养宠物的特点值。(同一时间呆在收养所中的,要么全是宠物,要么全是领养者,这些宠物和领养者的个数不会超过10000个)

Output

仅有一个正整数,表示一年当中所有收养了宠物的领养者的不满意程度的总和mod 1000000以后的结果。

Sample Input

5
0 2
0 4
1 3
1 2
1 5

Sample Output

3
(abs(3-2) + abs(2-4)=3,最后一个领养者没有宠物可以领养)

HINT

Source

裸的splay 结果又打错了

#include<cstdio>
#include<cstring>
using namespace std;
#define N 80010
int n,x1,x2,root,ans,cnt;
int fa[N],child[N][],key[N];
bool flag;
int abs(int x)
{
return x<?-x:x;
}
void zig(int x)
{
int y=fa[x];
fa[x]=fa[y];
child[fa[x]][y==child[fa[x]][]]=x;
fa[child[x][]]=y; child[y][]=child[x][];
fa[y]=x; child[x][]=y;
}
void zag(int x)
{
int y=fa[x];
fa[x]=fa[y]; child[fa[x]][y==child[fa[x]][]]=x;
fa[child[x][]]=y; child[y][]=child[x][];
fa[y]=x; child[x][]=y;
}
void splay(int x)
{
while(fa[x])
{
int y=fa[x],z=fa[y];
if(y==root)
{
if(x==child[y][]) zig(x); else zag(x);
break;
}
else if(x==child[y][]&&y==child[z][]) {zig(x); zig(x);}
else if(x==child[y][]&&y==child[z][]) {zig(x); zag(x);}
else if(x==child[y][]&&y==child[z][]) {zag(x); zig(x);}
else if(x==child[y][]&&y==child[z][]) {zag(x); zag(x);}
}
root=x;
}
void insert(int&x,int val,int last)
{
if(!x)
{
x=++cnt;
key[x]=val;
fa[x]=last;
splay(cnt);
}
else if(val>key[x]) insert(child[x][],val,x);
else insert(child[x][],val,x);
}
void erase(int x)
{
splay(x);
if(child[x][]*child[x][]==)
{
root=child[x][]+child[x][];
}
else
{
int k=child[x][];
while(child[k][]) k=child[k][];
child[k][]=child[x][]; fa[child[x][]]=k;
root=child[x][];
}
fa[root]=;
}
void findpro(int x,int k)
{
// printf("x=%d\n",x);
// printf("child[x][0]=%d\n",child[x][0]);
// printf("child[x][1]=%d\n",child[x][1]);
if(!x) return;
if(key[x]<k)
{
x1=x; findpro(child[x][],k);
} else findpro(child[x][],k);
}
void findnxt(int x,int k)
{
if(!x) return;
if(key[x]>k)
{
x2=x; findnxt(child[x][],k);
} else findnxt(child[x][],k);
}
int main()
{
//flag=true:有人
scanf("%d",&n);
for(int i=;i<=n;i++)
{
int opt,a; scanf("%d%d",&opt,&a);
x1=x2=-;
if(opt==)
{
if(flag&&root)
{
findpro(root,a); findnxt(root,a);
if(x1==-&&x2==-) continue;
if((a-key[x1]<=key[x2]-a&&x1!=-)||x2==-)
{
ans+=abs(a-key[x1]);
ans%=;
// printf("x1=%d\n",x1);
erase(x1);
}
else if(x2!=-)
{
ans+=abs(a-key[x2]);
ans%=;
// printf("x2=%d\n",x2);
erase(x2);
}
}
else if(!root||!flag)
{
flag=false;
insert(root,a,);
// printf("key=%d\n",key[cnt]);
}
}
else
{
if(!flag&&root)
{
findpro(root,a);
findnxt(root,a);
if(x1==-&&x2==-) continue;
if((a-key[x1]<=key[x2]-a&&x1!=-)||x2==-)
{
ans+=abs(a-key[x1]);
ans%=;
// printf("x1=%d\n",x1);
erase(x1);
}
else if(x2!=-)
{
ans+=abs(a-key[x2]);
ans%=;
// printf("x2=%d\n",x2);
erase(x2);
}
}
else if(!root||flag)
{
flag=true;
insert(root,a,);
}
}
// printf("root=%d\n",root);
// printf("ans=%d\n",ans);
}
printf("%d",ans);
return ;
}

bzoj1208的更多相关文章

  1. 【BZOJ1208】宠物收养所(平衡树,splay)

    题意:见题面 思路:因为每个时刻要么全是人要么全是宠物,所以可以一棵splay解决 维护单点插入,单点删除,求前驱,求后继即可 ..,..]of longint; num,fa:..]of longi ...

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

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

  3. BZOJ1208 HNOI2004 宠物收养所 【非旋转Treap】

    BZOJ1208 HNOI2004 宠物收养所 Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的 ...

  4. 【BZOJ1208】宠物收养所(splay)

    题意:见题面 思路:因为每个时刻要么全是人要么全是宠物,所以可以一棵splay解决 维护单点插入,单点删除,求前驱,求后继即可 ..,..]of longint; num,fa:..]of longi ...

  5. Bzoj1208 [HNOI2004]宠物收养所

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 7457  Solved: 2960 Description 最近,阿Q开了一间宠物收养所.收养所提供两 ...

  6. 宠物收养所(bzoj1208)

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

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

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

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

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

  9. BZOJ1208 宠物收养所

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

随机推荐

  1. 初识java之变量、数据类型和运算符(一)

    博友目标: 1.掌握变量的概念 2.引子----会使用常用数据类型 众所周知,每台电脑都有一个内存这么个必不可少的元素,那么到底内存到底是用来干什么的呢?其实啊,计算机内存相当于人类的大脑,计算机在处 ...

  2. Java异常之自定义异常

    哎呀,妈呀,又出异常了!俗话说:"代码虐我千百遍,我待代码如初恋". 小Alan最近一直在忙着工作,已经很久没有写写东西来加深自己的理解了,今天来跟大家聊聊Java异常.Java异 ...

  3. 设置ASP.NET MVC站点默认页为.html页 .

    同事部署了一个Asp.Net MVC的站点,希望它的默认页是index.html页,在vs2010中给站点根目录增加了index.html,然后调用没有什么问题,但部署到IIS7上,在功能试图=> ...

  4. 分布式集群系统下的高可用session解决方案

    目前,为了使web能适应大规模的访问,需要实现应用的集群部署. 而实现集群部署首先要解决session的统一,即需要实现session的共享机制. 目前,在集群系统下实现session统一的有如下几种 ...

  5. mac brew & gcc安装

    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" ...

  6. expdp 报The value (30) of MAXTRANS parameter ignored错误的原因诊断

    在使用expdp导出一个表的数据时遇到了下面情况,也不见其提示报错信息,一下子就执行完了,也没有导出我需要的数据 [oracle@getlnx01 dump_dir]$ expdp system/xx ...

  7. xp_sendmail: 由于邮件错误 0x80004005 而失败

    今天收到一封邮件说我们的一台SQL SERVER 2000服务器发送邮件有问题.我测试中发现了如下错误: exec xp_sendmail 'Konglb@esquel.com','hello, 12 ...

  8. jquery本地上传预览扩展(隐藏上传控件单击图片上传支持ie!!)

    我用到的原材料地址:http://www.cnblogs.com/leejersey/p/3660202.html 修改后: /// <reference path="../../Js ...

  9. mysql权限与安全

    一.MySQL权限系统通过两个阶段进行认证: (A) 对用户进行身份认证,IP地址和用户名联合, (B) 对合法用户赋予相应权限,权限表在数据库启动的时候载入内存中. 二.在权限的存取过程中,会用到& ...

  10. 关于xml的使用。

    使用的常用类: XmlSerializer ParaMapping StreamReader DirectionaryInfo FileInfo using as object 例子: public ...