博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 1208: [HNOI2004]宠物收养所
阅读量:6487 次
发布时间:2019-06-23

本文共 1704 字,大约阅读时间需要 5 分钟。

1 #include
2 #include
3 using namespace std; 4 int n,size,rt,kind,t1,t2; 5 long long ans; 6 int tr[80001][2],num[80001],fa[80001]; 7 void rotate(int x,int &k) 8 { 9 int y=fa[x],z=fa[y],l,r;10 if(tr[y][0]==x)l=0;else l=1;r=l^1;11 if(y==k)k=x;12 else{
if(tr[z][0]==y)tr[z][0]=x;else tr[z][1]=x;}13 fa[x]=z;fa[y]=x;fa[tr[x][r]]=y;14 tr[y][l]=tr[x][r];tr[x][r]=y;15 }16 void splay(int x,int &k)17 {18 int y,z;19 while(x!=k)20 {21 y=fa[x],z=fa[y];22 if(y!=k)23 {24 if((tr[y][0]==x)^(tr[z][0]==y))rotate(x,k);25 else rotate(y,k);26 }27 rotate(x,k);28 }29 }30 void ins(int &k,int x,int last)31 {32 if(k==0){size++;k=size;num[k]=x;fa[k]=last;splay(k,rt);return;}33 if(x
=x){t2=k;ask_after(tr[k][0],x);}59 else ask_after(tr[k][1],x);60 }61 62 int main()63 {64 scanf("%d",&n);65 int f,x;66 for(int i=1;i<=n;i++)67 {68 scanf("%d%d",&f,&x);69 if(!rt){kind=f;}70 if(kind==f){ins(rt,x,0);71 }72 else73 {74 t1=t2=-1;75 ask_before(rt,x);ask_after(rt,x);76 if(t1==-1){ans+=num[t2]-x;ans%=1000000;del(t2);}77 else if(t2==-1){ans+=x-num[t1];ans%=1000000;del(t1);}78 else79 {80 if(x-num[t1]>num[t2]-x) {ans+=num[t2]-x;ans%=1000000;del(t2);}81 else{ans+=x-num[t1];ans%=1000000;del(t1);}82 }83 } 84 }85 cout<
<

平衡树,当宠物多时,将宠物加入平衡树中,当读入一个收养者时,找收养者值的前驱和后继,并把接近的删除。收养者多是也这样。

转载于:https://www.cnblogs.com/xydddd/p/5243661.html

你可能感兴趣的文章
从CVS迁移到SVN
查看>>
总部与前线
查看>>
微软推出Windows 10专业教育版:Cortana没了
查看>>
TensorFlow教程之API DOC 6.1.2Class tensorflow::EnvWrapper
查看>>
多目标跟踪突破:上交大&中兴 MOT Challenge 测评获第一
查看>>
控制ASP.NET Web API 调用频率
查看>>
系统诊断小技巧(7):利用Iptables进行排查和诊断的简易方案
查看>>
IPv6的渗透率比人们想象的要快速?
查看>>
针对Windows零日漏洞,微软是不是太过“无作为”了?
查看>>
推特解散商业团队 终止开发“Buy”按钮
查看>>
英特尔SSD:17年将专注于3D NAND和PCIe
查看>>
python (3):wxPython打包app,报错
查看>>
给网站更换服务器需要注意什么?
查看>>
成长型企业ERP系统实施的八大准则
查看>>
nginx重启脚本
查看>>
理解Linux系统/etc/init.d目录和/etc/rc.local脚本
查看>>
代码整洁之道
查看>>
svm 预测标签的概率输出
查看>>
ActiveMQ(25):优化与建议
查看>>
使用Intelij Idea经过的坑
查看>>