bzoj 1208: [HNOI2004]宠物收养所
2016-03-04 22:21
323 查看
#include<iostream> #include<cstdio> using namespace std; int n,size,rt,kind,t1,t2; long long ans; int tr[80001][2],num[80001],fa[80001]; void rotate(int x,int &k) { int y=fa[x],z=fa[y],l,r; if(tr[y][0]==x)l=0;else l=1;r=l^1; if(y==k)k=x; else{if(tr[z][0]==y)tr[z][0]=x;else tr[z][1]=x;} fa[x]=z;fa[y]=x;fa[tr[x][r]]=y; tr[y][l]=tr[x][r];tr[x][r]=y; } void splay(int x,int &k) { int y,z; while(x!=k) { y=fa[x],z=fa[y]; if(y!=k) { if((tr[y][0]==x)^(tr[z][0]==y))rotate(x,k); else rotate(y,k); } rotate(x,k); } } void ins(int &k,int x,int last) { if(k==0){size++;k=size;num[k]=x;fa[k]=last;splay(k,rt);return;} if(x<num[k])ins(tr[k][0],x,k);else ins(tr[k][1],x,k); } void del(int x) { splay(x,rt); if(tr[x][0]*tr[x][1]==0) {rt=tr[x][0]+tr[x][1];} else { int k=tr[x][1]; while(tr[k][0])k=tr[k][0]; tr[k][0]=tr[x][0];fa[tr[x][0]]=k; rt=tr[x][1]; } fa[rt]=0; } void ask_before(int k,int x) { if(k==0)return; if(num[k]<=x){t1=k;ask_before(tr[k][1],x);} else ask_before(tr[k][0],x); } void ask_after(int k,int x) { if(k==0)return; if(num[k]>=x){t2=k;ask_after(tr[k][0],x);} else ask_after(tr[k][1],x); } int main() { scanf("%d",&n); int f,x; for(int i=1;i<=n;i++) { scanf("%d%d",&f,&x); if(!rt){kind=f;} if(kind==f){ins(rt,x,0); } else { t1=t2=-1; ask_before(rt,x);ask_after(rt,x); if(t1==-1){ans+=num[t2]-x;ans%=1000000;del(t2);} else if(t2==-1){ans+=x-num[t1];ans%=1000000;del(t1);} else { if(x-num[t1]>num[t2]-x) {ans+=num[t2]-x;ans%=1000000;del(t2);} else{ans+=x-num[t1];ans%=1000000;del(t1);} } } } cout<<ans<<endl; return 0; }
平衡树,当宠物多时,将宠物加入平衡树中,当读入一个收养者时,找收养者值的前驱和后继,并把接近的删除。收养者多是也这样。
相关文章推荐
- react native mac install
- Unix下C程序内存泄露检测工具:valgrind的安装使用
- centos6.4 change to 163 yum repo
- 承接云购类网站完整建立工作。
- MFC中char*,string和CString之间的转换
- HDU Humble Numbers
- cocapods 更新第三方库遇到的问题
- (正权最短路)Dijkstra+优先队列模板---持续更新
- 斐讯K1路由器刷入openwrt及通过netkeeper连接校园网
- cocoapods 的使用及作用
- BZOJ1283 序列
- 自定义View时,用到Paint Canvas的一些温故,自定义Loading控件(“六边形”的旋转跳跃)
- CocoaPods的安装使用和常见问题
- nyoj 171 聪明的kk
- JAVA【类】析构器、重载与继承、方法的重写、自动转型、多态、方法与类的分类、接口继承
- 磁盘格式化mke2fs
- 制作验证码时 图片无法刷新
- bzoj 1207: [HNOI2004]打鼹鼠
- java中的方法和数组
- 提高网站权重的方法(留作参考)