博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[BZOJ1588]营业额统计(Splay)
阅读量:6368 次
发布时间:2019-06-23

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

Description

题意:给定 n个数,每给定一个数,在之前的数里找一个与当前数相差最小的数,求相差之和(第一个数为它本身)

如:5 1 2 5 4 6

Ans=5+|1-5|+|2-1|+|5-5|+|4-5|+|6-5|=5+4+1+0+1+1=12

n<=32767

Solution

平衡树入门题,每读入一个数,将当前数旋转至树根 ,在左子树中找一个最大以及右子树中最小的与根进行比较即可

Code

#include 
#include
#define N 33333#define Inf 0x7fffffff/2//会爆int#define lc(x) ch[(x)][0]using namespace std;int n,root,tmp,fa[N],ch[N][2],k[N],ind=1,Ans;//k[]下标节点储存的值inline void rotate(int p){//旋转 int q=fa[p],y=fa[q],x=(ch[q][1]==p); ch[q][x]=ch[p][x^1];fa[ch[q][x]]=q; ch[p][x^1]=q;fa[q]=p; fa[p]=y; if(y){ if(ch[y][0]==q) ch[y][0]=p; else if(ch[y][1]==q) ch[y][1]=p; } }inline void splay(int x){ for(int y;y=fa[x];rotate(x)) if(fa[y]) rotate((x==lc(y))==(y==lc(fa[y]))?y:x); root=x;}inline void Ins(int x,int v){//插入 int y; while(1){ y=ch[x][k[x]

转载于:https://www.cnblogs.com/void-f/p/8377276.html

你可能感兴趣的文章
JVM学习(4)——全面总结Java的GC算法和回收机制---转载自http://www.cnblogs.com/kubixuesheng/p/5208647.html...
查看>>
getParameter和getAttribute的区别
查看>>
自动工作负载库理论与操作(Automatic Workload Repository,AWR)
查看>>
Redis两种方式实现限流
查看>>
CentOS 7 中使用NTP进行时间同步
查看>>
在MongoDB数据库中查询数据(上)
查看>>
Python import其他文件夹的文件
查看>>
Jvm(22),回收策略-----标记清除算法
查看>>
MySQL多表关联查询效率高点还是多次单表查询效率高,为什么?
查看>>
UNIX 高手的 10 个习惯
查看>>
传值与传引用
查看>>
HDU 1538 A Puzzle for Pirates(海盗分金问题)
查看>>
C# Web Forms - Using jQuery FullCalendar
查看>>
H5移动端知识点总结
查看>>
Sublime-Text-2-pydocstring --- 自动生成python docstring的插件
查看>>
UNIX进程环境
查看>>
学习面试题Day03
查看>>
我最喜欢的jQuery插件模板
查看>>
【云计算】Docker 多进程管理方案
查看>>
[LeetCode] Best Meeting Point 最佳开会地点
查看>>