切傻逼题还能wa那么多次我也是醉了

好啦其实是sbt都不会敲了(一直用神器treap)

重点是研究了下陈大神的删除,以前treap的删除都是直接旋转去删的……

还是treap大法好&……

题解还用写么?就是找前驱找后继然后判断一下

const
maxn=;
mm=<<;
mmm=; var
left,right,value,s:array[..maxn]of longint;
ans,n,m,i,j,k,l,t,tot,now:longint; function min(x,y:longint):longint;
begin
if x<y then exit(x);
exit(y);
end; function max(x,y:longint):longint;
begin
if x<y then exit(y);
exit(x);
end; procedure lt(var x:longint);
var
k:longint;
begin
k:=right[x];
right[x]:=left[k];
left[k]:=x;
s[k]:=s[x];
s[x]:=s[left[x]]++s[right[x]];
x:=k;
end; procedure rt(var x:longint);
var
k:longint;
begin
k:=left[x];
left[x]:=right[k];
right[k]:=x;
s[k]:=s[x];
s[x]:=s[left[x]]++s[right[x]];
x:=k;
end; procedure maintain(var t:longint);
begin
if s[left[left[t]]]>s[right[t]] then begin
rt(t);
maintain(right[t]);
maintain(t);
exit;
end;
if s[right[left[t]]]>s[right[t]] then begin
lt(left[t]);
rt(t);
maintain(left[t]);
maintain(right[t]);
maintain(t);
exit;
end;
if s[right[right[t]]]>s[left[t]] then begin
lt(t);
maintain(left[t]);
maintain(t);
exit;
end;
if s[left[right[t]]]>s[left[t]] then begin
rt(right[t]);
lt(t);
maintain(left[t]);
maintain(right[t]);
maintain(t);
exit;
end;
end; procedure insert(var t:longint;x:longint);
begin
if t= then begin
inc(tot);
t:=tot;
left[t]:=;
right[t]:=;
value[t]:=x;
s[t]:=;
exit;
end;
inc(s[t]);
if x<=value[t] then insert(left[t],x)
else insert(right[t],x);
maintain(t);
end; function delete(var t:longint;x:longint):longint;
begin
dec(s[t]);
if (x=value[t]) or (x<value[t]) and (left[t]=) or (x>value[t]) and (right[t]=) then begin
delete:=value[t];
if (left[t]=) or (right[t]=) then t:=left[t]+right[t]
else
value[t]:=delete(left[t],value[t]+);
end
else
if x<value[t] then delete:=delete(left[t],x)
else delete:=delete(right[t],x);
end; function pred(t,x:longint):longint;
begin
if t= then exit(-mm);
if value[t]=x then exit(x);
if value[t]>x then exit(pred(left[t],x))
else
exit(max(value[t],pred(right[t],x)));
end; function succ(t,x:longint):longint;
begin
if t= then exit(mm);
if value[t]=x then exit(x);
if value[t]<x then exit(succ(right[t],x))
else
exit(min(value[t],succ(left[t],x)));
end; begin
readln(n);
now:=;
ans:=;
t:=;
while n> do begin
dec(n);
readln(i,j);
if i= then begin
if now>= then
insert(t,j)
else begin
k:=pred(t,j);
l:=succ(t,j);
if j-k<=l-j then begin
ans:=(ans+j-k)mod mmm;
delete(t,k);
end
else begin
ans:=(ans+l-j)mod mmm;
delete(t,l);
end;
end;
inc(now);
end
else begin
if now> then begin
k:=pred(t,j);
l:=succ(t,j);
if j-k<=l-j then begin
ans:=(ans+j-k)mod mmm;
delete(t,k);
end
else begin
ans:=(ans+l-j) mod mmm;
delete(t,l);
end;
end
else insert(t,j);
dec(now);
end;
end;
writeln(ans);
readln;
readln;
end.

bzoj1208: [HNOI2004]宠物收养所 (sbt)的更多相关文章

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

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

  2. bzoj1208 [HNOI2004]宠物收养所(STL,Treap)

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

  3. 2018.07.06 BZOJ1208: HNOI2004宠物收养所(非旋treap)

    1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec Memory Limit: 162 MB Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收 ...

  4. Bzoj1208 [HNOI2004]宠物收养所

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

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

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

  6. [bzoj1208][HNOI2004]宠物收养所——splay

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

  7. [bzoj1208][HNOI2004][宠物收养所] (平衡树)

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

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

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

  9. 【set】【Splay】【pb_ds】bzoj1208 [HNOI2004]宠物收养所

    每次来的如果是人,且宠物数不为零,就从宠物中选出一个与其差距最小的,累加答案:若为零,就把他放入另一个集合里. 如果是宠物,则同上. 各种平衡树都可过,我蛋疼地用了pb_ds. Code: #incl ...

随机推荐

  1. python 3.6 setup

    1.添加python3.6安装包,并且安装 sudo apt-get install software-properties-common 2.下载python3.6 sudo add-apt-rep ...

  2. ajax跨域请求php

    在众多站群中,不同功能的系统使用独立的一个域名,各系统之间存在相互调用的关系.使用js的XMLHttpRequest调用其他域名提示跨域权限不足.有些可能认为都同属于同一个顶级域名或者说域名一模一样怎 ...

  3. outer join test

    create table t1_outerjoin(a int, b int , c int); create table t2_outerjoin(a int); create table t3_o ...

  4. 在VMware虚拟机下安装Linux CentOS7

    1.首先下载并安装VMware虚拟机,下载地址:https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluatio ...

  5. OSG-视口&LOD&Imposter

    本文转至http://www.cnblogs.com/shapherd/archive/2010/08/10/osg.html 作者写的比较好,再次收藏,希望更多的人可以看到这个文章 互联网是是一个相 ...

  6. 怎样安装JMeter

    JMeter有图形界面, 而且支持中文! JMeter官网地址: http://jmeter.apache.org/ 点击左上角的下载: 点击下面的.zip后缀的压缩包: 解压到本地: JMeter目 ...

  7. MySQL三方面优化

    第一方面:30种mysql优化sql语句查询的方法1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用 ...

  8. 175. Invert Binary Tree【LintCode by java】

    Description Invert a binary tree. Example 1 1 / \ / \ 2 3 => 3 2 / \ 4 4    解题:题目要求讲二叉树的左子树和右子树对调 ...

  9. 【springmvc+mybatis项目实战】杰信商贸-3.需求分析与数据库建模

    开发步骤需求:生产厂家信息维护基础表FACTORY_C 1.业务需求:a)<需求说明书>     1)描述业务功能     生产厂家模块     功能:为在购销合同模块中的货物信息和附件信 ...

  10. 【转】cocos2d-x如何优化内存的应用

    原地址:http://cblog.chinadaily.com.cn/blog-942327-4327173.html 注:自身以前也写过cocos2d-x如何优化内存的应用,以及内存不够的情况下怎么 ...