wiki1285
2013-09-21 16:50
裸
- //By BLADEVIL
- var
- n :longint;
- i :longint;
- x, y :longint;
- t, tot :longint;
- key, s, left, right :array[..] of longint;
- ft :longint;
- a, b :longint;
- ans :longint;
- procedure right_rotate(var t:longint);
- var
- k :longint;
- begin
- k:=left[t];
- left[t]:=right[k];
- right[k]:=t;
- s[k]:=s[t];
- s[t]:=s[left[t]]+s[right[t]]+;
- t:=k;
- end;
- procedure left_rotate(var t:longint);
- var
- k :longint;
- begin
- k:=right[t];
- right[t]:=left[k];
- left[k]:=t;
- s[k]:=s[t];
- s[t]:=s[left[t]]+s[right[t]]+;
- t:=k;
- end;
- procedure maintain(var t:longint;flag:boolean);
- begin
- if not flag then
- if s[left[left[t]]]>s[right[t]] then
- right_rotate(t) else
- if s[right[left[t]]]>s[right[t]] then
- begin
- left_rotate(left[t]);
- right_rotate(t);
- end else exit
- else
- if s[right[right[t]]]>s[left[t]] then
- left_rotate(t) else
- if s[left[right[t]]]>s[left[t]] then
- begin
- right_rotate(right[t]);
- left_rotate(t);
- end else exit;
- maintain(left[t],false);
- maintain(right[t],true);
- maintain(t,true);
- maintain(t,false);
- end;
- procedure insert(var t:longint; v:longint);
- begin
- if t= then
- begin
- inc(tot);
- t:=tot;
- key[t]:=v;
- s[t]:=;
- left[t]:=;
- right[t]:=;
- end else
- begin
- inc(s[t]);
- if v<key[t] then insert(left[t],v) else insert(right[t],v);
- maintain(t,v>=key[t]);
- end;
- end;
- function delete(var t:longint; v:longint):longint;
- begin
- dec(s[t]);
- if (v=key[t]) or (v<key[t]) and (left[t]=) or (v>key[t]) and (right[t]=) then
- begin
- delete:=key[t];
- if (left[t]=) or (right[t]=) then
- t:=left[t]+right[t] else
- key[t]:=delete(left[t],key[t]+);
- end else
- if v<key[t] then delete:=delete(left[t],v) else delete:=delete(right[t],v);
- end;
- function pre(var t:longint; v:longint):longint;
- begin
- if t= then exit(-);
- if v<key[t] then pre:=pre(left[t],v) else
- begin
- pre:=pre(right[t],v);
- if pre=- then pre:=key[t];
- end;
- end;
- function succ(var t:longint; v:longint):longint;
- begin
- if t= then exit(-);
- if key[t]<=v then succ:=succ(right[t],v) else
- begin
- succ:=succ(left[t],v);
- if succ=- then succ:=key[t];
- end;
- end;
- begin
- read(n);
- ans:=;
- t:=; tot:=; s[t]:=;
- for i:= to n do
- begin
- read(x,y);
- if x=ft then insert(t,y) else
- if s[t]= then
- begin
- ft:=x;
- insert(t,y);
- end else
- begin
- a:=pre(t,y); b:=succ(t,y);
- if a=- then a:=-maxlongint div ;
- if b=- then b:=maxlongint div ;
- if abs(b-y)<abs(y-a) then
- begin
- ans:=(ans+abs(b-y)) mod ;
- b:=delete(t,b);
- end else
- begin
- ans:=(ans+abs(y-a)) mod ;
- a:=delete(t,a);
- end;
- end;
- end;
- writeln(ans);
- end.
wiki1285的更多相关文章
随机推荐
- Android4.0系统以上程序不出现菜单键的问题解决
去掉targetSdkVersion 或改为targetSdkVersion =13或更小.. 不改targetSdkVersion的办法:在onCreate() 里setContentView()之 ...
- Git创建project
1.登录创建新仓库 命名 2.https://gitforwindows.org/ 下载git的windows客户端,输入git查看是否成功 3.创建文件夹,写内容并查看,和linux指令一样 4. ...
- 洛谷P1379八数码难题
题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中. 要求解的问题是:给出一种初始布局(初始状态)和目标布局(为 ...
- LeetCode 全解(bug free 训练)
1.Two Sum Given an array of integers, return indices of the two numbers such that they add up to a s ...
- 机器学习 (二) 多变量线性回归 Linear Regression with Multiple Variables
文章内容均来自斯坦福大学的Andrew Ng教授讲解的Machine Learning课程,本文是针对该课程的个人学习笔记,如有疏漏,请以原课程所讲述内容为准.感谢博主Rachel Zhang 的个人 ...
- 学习bash——管道命令
摘要:管道命令概述.常见管道命令的使用(cut/grep.sort/wc/uniq.tee.tr/col/join/paste/expand.xargs.减号-) 一.概述 命令执行完会在屏幕上打印相 ...
- 软工实践 - 第二十六次作业 Beta 冲刺(4/7)
队名:起床一起肝活队 组长博客:https://www.cnblogs.com/dawnduck/p/10124816.html 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过 ...
- scp源码浅析
背景: 经常使用scp传文件,发现它真的很给力,好奇心由来已久! 恰好接到一个移植SSH服务到专有网络(非IP网络)的小任务,完成工作又能满足好奇心,何乐而不为! 我只从源码浅浅的分析一下,后续有更多 ...
- windows curl 命令
windows 64 curl 命令的使用 https://blog.csdn.net/qq_27093465/article/details/53545693 curl命令可以通过命令行的方式,执行 ...
- 【bzoj1452】[JSOI2009]Count 二维树状数组
题目描述 输入 输出 样例输入 样例输出 1 2 题解 二维树状数组 一开始没看到 1≤c≤100 ,想到了主X树和X块,结果发现c的范围那么小... 二维树状数组水题,和一维的一样,向上修改,向下查 ...