Splay(dispatching)

2024-01-06 21:32
文章标签 splay dispatching

本文主要是介绍Splay(dispatching),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原题:APIO 2012 派遣

方法:splay 启发式合并

program dispatching;
const maxn=100000+100;
typelink=^node;node=record x:longint; next:link;end;
varl,r,s,w,f,fa:array[1..maxn]of longint;ge:array[1..maxn]of link;
procedure push(var x:link;const t:longint);inline;var p:link;
beginnew(p);p^.x:=t;p^.next:=x;x:=p;
end;
procedure update(const x:longint);inline;
begins[x]:=s[l[x]]+s[r[x]]+1;f[x]:=f[l[x]]+f[r[x]]+w[x];
end;
procedure left(var i:longint);var j:longint;
beginj:=r[i];r[i]:=l[j];l[j]:=i;s[j]:=s[i];f[j]:=f[i];update(j);i:=j;
end;
procedure right(var i:longint);var j:longint;
beginj:=l[i];l[i]:=r[j];r[j]:=i;s[j]:=s[i];f[j]:=f[i];update(j);i:=j;
end;
procedure insert(var i:longint;const j:longint);
beginif i=0 then begin i:=j; exit; end;if w[j]<=w[i] then begininsert(l[i],j);right(i);end else begininsert(r[i],j);left(i);end;
end;
function union(x,y:longint):longint;
var ll,rr:longint;
beginif (x=0)or(y=0) then exit(x+y);if x=y then exit(x);ll:=l[y];l[y]:=0;rr:=r[y];r[y]:=0;s[y]:=0; insert(x,y);l[y]:=union(l[x],ll);r[y]:=union(r[x],rr);update(x);exit(x);
end;
while find(x:longint):longint;
beginwhile x<>0 do beginif s[l[x]]+1=k then exit(X);if s[l[x]]<k then x:=l[x] elsebegin dec(k,s[l[x]]); x:=r[x]; end;end;
end;var n,i,h,t,ans:longint; p:link;
procedure getans(const x:longint);inline;
begin if x>ans then ans:=x;end;
beginreadln(n);for i:=1 to n do begin readln(fa[i],w[i],l[i]); push(ge[fa[i]],i);end;for i:=1 to n do begin s[i]:=1;tt[i]:=i;end;while h<t do begin inc(h); p:=ge[q[h]]; while p<>nil do begin inc(t);q[t]:=p^.x;p:=p^.next;tt[q[h]]:=union(ls[x]);end;end;for i:=n downto 1 do beginp:=ge[q[i]];while p<>nil do begintt[q[i]]:=union(tt[p^.x]);x:=x^.next;endgetans(l[q[i]]*find(tt[q[i]]));end;
end;


这篇关于Splay(dispatching)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/577677

相关文章

Splay树(区间更新)—— POJ 3468 A Simple Problem with Integers

对应POJ 题目:点击打开链接 A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072KTotal Submissions: 72765 Accepted: 22465Case Time Limit: 2000MS Description You have N integers, A1

Splay树(区间添加删除 | 区间翻转)——HDU 3487 Play with Chain

对应HDU题目:点击打开链接 Play with Chain Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4571    Accepted Submission(s): 1859 Problem Descript

【splay】BZOJ1208宠物收养所

1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec   Memory Limit: 162 MB Submit: 3620   Solved: 1364 [ Submit][ Status] Description 最近,阿Q开了一间宠物收养所。收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物。每个领养者都希望领养到自己满意的宠物,阿Q

树学习 ---------伸展树(splay Tree)

一、简介: 伸展树,或者叫自适应查找树,是一种用于保存有序集合的简单高效的数据结构。伸展树实质上是一个二叉查找树。 允许查找,插入,删除,删除最小,删除最大,分割,合并等许多操作,这些操作的时间复杂度为O(logN)。由于伸 展树可以适应需求序列,因此他们的性能在实际应用中更优秀。

Splay小结

Splay基本操作: 1.rotate() 旋转操作---包含三种情况 2.splay() 伸展-----一般是旋到根或根的父亲的下面 3.rotate_to() 先找到要伸展的结点,再splay; 4.push_up() 向上维护根的信息 5.push_down()向下下放延迟标记 6.Cut() 删除一个区间 7.insert()插入一个区间 8.Flip()翻转一个区间 9

BZOJ 1208 宠物收养所 Splay树

Splay的简单应用,找和一个数最接近的数,例如找和x最接近的数,把x旋转到根,要么是左子树的最大值,要么是右子树的最小值。 #include <cstdio>#include <cstring>#include <algorithm>#include <cstdlib>using namespace std;typedef long long LL;const int mod =

HDU 3436 Queue-jumpers Splay+离散化

有n个人从小到大排成一列,分别记为1,2...,m次询问,3种操作: 1.把x这个人放到队首。 2.求x这个人在哪个位置。 3.求x这个位置是那个人。 虽然最多有1亿个人,但是操作最多只有10w次,那就离散化,把连续一段没有出现过的数压缩成一个点,然后就是普通的Splay树了。 #include <cstdio>#include <cstring>#include <algorithm>u

BZOJ 1056 排名系统 Splay

实现一颗名次树,提供如下操作 上传一条新的得分记录、查询某个玩家的当前排名以及返回某个区段内的排名记录。 splay的基本的插入删除操作,在加一个hash映射名字和得分,不过可能值会相同。可以给每个节点增加一个表示时间的域,如果值一样,就以时间为第二关键字继续在子树中递归查找。

poj3481 Double Queue splay

题意:对于某种队列有3中操作,cmd =1 ,将优先级为p的顾客k加入队列 。 cmd=2,将队列优先级最高的顾客丢出队列并输出顾 客,cmd=3,将队列优先级最低的顾客丢出队列并输出顾客。 思路:用了splay,结果压根都没旋转操作。。找优先级小的就找最左端,然后把对应指针修改就行,找优先级大的就找最右端,然 后把对应指针修改就行。所以其实BIT就行了。详见代码: // file n

Codeforces 675D Tree Construction (splay)

转自:https://blog.csdn.net/dreamon3/article/details/51436043 题意 往一个根为a[0]的二叉搜索树里面插数,每插一个数就输出他的父节点。 思路 根据二叉搜索树的性质,我们插进去一个数,他的父节点肯定是比他小的最大的和比他大的最小的数里面的两个,然后这两个节点找最深的那个就是他的父节点,我们可以给这些节点设置一个时间戳就能判断先后顺序了。