最近,阿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)。【任务描述】你得到了一年当中,领养者和被收养宠物到来收养所的情况,希望你计算所有收养了宠物的领养者的不满意程度的总和。这一年初始时,收养所里面既没有宠物,也没有领养者。

splay模板题,打了1h,我简直菜爆了

怪不得noipd2t3只能打暴力GG。。。

还有GD+5分数线分这个操作。。。。。无力吐槽

#pragma GCC opitmize("O3")
#pragma G++ opitmize("O3")
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 100010
#define son(x) (x==ch[f[x]][1])
using namespace std;
int f[N],ch[N][2],sz[N],v[N];
int n,m,cnt=0,rt=0;
inline int newnode(int k){++cnt; v[cnt]=k; sz[cnt]=1;return cnt;
}
inline void ps(int x){ sz[x]=sz[ch[x][0]]+sz[ch[x][1]]+1; }
inline void rot(int x){int p=f[x],g=f[p],d=son(x);ch[p][d]=ch[x][!d]; f[ch[p][d]]=p;ch[x][!d]=p; f[p]=x; f[x]=g;if(g) ch[g][p==ch[g][1]]=x; ps(p); ps(x);
}
inline void splay(int x,int r=0){for(int p;(p=f[x])!=r;rot(x))if(f[p] && son(x)==son(p)) rot(p);if(!r) rt=x;
}
inline int insert(int k,int x=rt){if(!rt) return rt=newnode(k);for(int d;;){d=(v[x]<k);if(!ch[x][d]){f[ch[x][d]=newnode(k)]=x;splay(ch[x][d]); return rt;} x=ch[x][d];}
}
inline int select(int k,int x=rt){for(int w;;){w=sz[ch[x][0]]+1;if(w==k) return x;if(k<w) x=ch[x][0];else k-=w,x=ch[x][1];}
}
inline int search(int k,int x=rt){for(;x&&v[x]!=k;x=ch[x][v[x]<k]);return x;
}
inline int rank(int k,int x=rt){int r=1;for(;x;){if(v[x]>=k) x=ch[x][0];else{ r+=sz[ch[x][0]]+1; x=ch[x][1]; }}return r;
}
inline int remove(int k,int x=rt){splay(select(rank(k)+1));for(x=ch[rt][0];ch[x][1];x=ch[x][1]);ch[f[x]][son(x)]=ch[x][0]; f[ch[x][0]]=f[x]; ps(f[x]); splay(f[x]);
}
int main(){int d=0; long long ans=0;scanf("%d",&n); insert(-(1<<30));insert(1<<30);for(int o,x,y;n--;){scanf("%d%d",&o,&x);if(sz[rt]==2||o==d){d=o; insert(x);} else {if(search(x)){ remove(x); continue; }o=rank(x);y=select(o-1);o=select(o);if(v[o]-x<x-v[y]){ans+=v[o]-x;remove(v[o]);} else {ans+=x-v[y];remove(v[y]);}}}printf("%lld\n",ans%1000000);
}

Bzoj1208 宠物收养所相关推荐

  1. BZOJ1208[HNOI2004]宠物收养场——treap

    凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的一个特殊的公式,得出该领养者希望领 ...

  2. bzoj1208: [HNOI2004]宠物收养所

    Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 6182  Solved: 2396 [Submit][Status][Discuss] Descri ...

  3. bzoj1208【HNOI2004】宠物收养所

    1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec   Memory Limit: 162 MB Submit: 5923   Solved: 2296 [ Submit ...

  4. 洛谷P2286 [HNOI2004]宠物收养所 [STL,平衡树]

    题目传送门 宠物收养所 题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的 ...

  5. B1208 [HNOI2004]宠物收养所 平衡树||set (滑稽)

    这个题是一道splay裸题,但是我不太会写,所以用set直接水过去!!!哈哈哈哈,美滋滋. set总结: set是一个集合,然后里面没用重复的元素.里面有一些函数: begin()     ,返回se ...

  6. 洛谷P2286 [HNOI2004]宠物收养场

    题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的一个特殊的公式,得出该领 ...

  7. cogs62 [HNOI2004] 宠物收养所

    cogs62 [HNOI2004] 宠物收养所 啦啦啦啦 不维护区间的平衡树题都是树状数组+二分练手题! 不会的参考我的普通平衡树的多种神奇解法之BIT+二分答案 // It is made by X ...

  8. 洛谷 P2286 [HNOI2004]宠物收养场

    题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的一个特殊的公式,得出该领 ...

  9. BZOJ 1208: [HNOI2004]宠物收养所

    1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 7684  Solved: 3042 [Submit][S ...

  10. 1208: [HNOI2004]宠物收养所

    1208: [HNOI2004]宠物收养所 1.用Treap树写: 只需要三个操作,插入,删除,查找(同时找出其前继后继): View Code /************************** ...

最新文章

  1. 简洁版本 STP/RSTP/MSTP的区别以及各自的特点
  2. 谷歌浏览器安装POSTMAN
  3. AngularJS table 按照表头字段排序功能(升序和降序)
  4. 通过Redis实现分布式锁
  5. 使用 Castle ActiveRecord
  6. 01 | 基础架构:一条 SQL 查询语句是如何执行的
  7. 软件项目送上门来了,还要学会说不,接了项目拿了定金噩梦才刚刚开始
  8. 数学的威力:一个方程提升中国卫星图像质量30%
  9. @HystrixCommand 注解的作用与注意事项
  10. NBU对oracle数据库进行rman备份
  11. python改文件名_python 怎么改文件名
  12. HDU2050 折线分割平面【切割平面】
  13. web开发技术复习笔记
  14. 教你如何修改树莓派的时区和网络对时
  15. WinDriver 安装
  16. 如何在南方CASS中内插高程点
  17. 头文件中extern “C”的理解
  18. iOS游戏开发之Game Center研究
  19. 【python】LOFTER抽奖程序
  20. Opencv基础使用3——HDR 图像合成

热门文章

  1. 搜索引擎点击日志聚类实现相关搜索
  2. android 百度地图大头针,百度地图API 地理位置获取和大头针显示当前位置
  3. 今天终于把爬虫的Ajax请求搞懂了
  4. volatility常用的命令
  5. NetGear stora 重置成功后,个人文件夹丢失的找回办法
  6. 体系结构笔记------动态调度中的Tomasulo算法
  7. 美团 P2P 图书馆实践:5天时间1845册图书共享入库
  8. qq发文件大小上限_QQ邮箱上传附件一般有限制吗?最大能发送多大的文件
  9. cf 1538D - Another Problem About Dividing Numbers
  10. 成为研究生后你都明白了什么?