HNOI 2002 营业额统计(Splay树)
1588: [HNOI2002]营业额统计
Time Limit: 5 Sec Memory Limit: 162 MB
Submit: 6923 Solved: 2286
[Submit][Status]
Description
Input
Output
Sample Input
5
1
2
5
4
6
Sample Output
HINT
结果说明:5+|1-5|+|2-1|+|5-5|+|4-5|+|6-5|=5+4+1+0+1+1=12
Splay树的插入题
代码:
#include <stdio.h>
#include <algorithm>
#include <math.h>
using namespace std;struct node{int father,left,right,data;
}tree[100008];
int time=0,n,root,sum=0;void rightrotate(int x)
{ int y=tree[x].father; int z=tree[y].father; tree[y].left=tree[x].right; if(tree[x].right!=-1){tree[tree[x].right].father=y;} tree[x].father=z; if(z!=-1){if(tree[z].left==y) tree[z].left=x;else tree[z].right=x;} tree[x].right=y; tree[y].father=x;
}void leftrotate(int x)
{ int y=tree[x].father; int z=tree[y].father; tree[y].right=tree[x].left; if(tree[x].left!=-1){tree[tree[x].left].father=y;} tree[x].father=z; if(z!=-1){if(tree[z].left==y) tree[z].left=x;else tree[z].right=x;} tree[x].left=y; tree[y].father=x;
}void splay(int x)
{ while(tree[x].father!=-1) { int y=tree[x].father; int z=tree[y].father; if(z==-1){ if(tree[y].left==x) rightrotate(x);else leftrotate(x); } else { if(tree[z].left==y&&tree[y].left==x){rightrotate(y); rightrotate(x);} else if(tree[z].left==y&&tree[y].right==x){leftrotate(x); rightrotate(x);} else if(tree[z].right==y&&tree[y].right==x){leftrotate(y); leftrotate(x);} else {rightrotate(x); leftrotate(x);} }} root=x;
}int qq(int x)
{ int y=tree[x].left; if(y==-1) return -1; while(tree[y].right!=-1) y=tree[y].right; return y;
}int hj(int x)
{ int y=tree[x].right; if(y==-1) return -1; while(tree[y].left!=-1) y=tree[y].left; return y;
}bool BST_insert(int dat,int x)
{ if(dat==tree[x].data){splay(x);//提升到根节点 return false;} if(dat<tree[x].data) { if(tree[x].left==-1){tree[x].left=time; tree[time].father=x;tree[time].left=tree[time].right=-1; tree[time].data=dat;return true; } else BST_insert(dat,tree[x].left); } else { if(tree[x].right==-1){tree[x].right=time; tree[time].father=x;tree[time].left=tree[time].right=-1; tree[time].data=dat;return true;} else BST_insert(dat,tree[x].right); }
}
void insert(int dat)
{ time++; if(!BST_insert(dat,root)) return ; splay(time); int q=qq(time); int h=hj(time); int Min=100000000; if(q!=-1) Min=min(Min,abs(tree[q].data-dat)); if(h!=-1) Min=min(Min,abs(tree[h].data-dat)); sum+=Min;
} int main()
{ int n,a1; while(scanf("%d",&n)!=-1){ sum=0; time=0; scanf("%ld",&a1); sum=a1; time++; tree[time].father=-1; tree[time].left=tree[time].right=-1; tree[time].data=a1; root=time; for(int i=1;i<=n-1;i++) { int dats=0; scanf("%ld",&dats);insert(dats); } printf("%ld\n",sum);}return 0;
}
HNOI 2002 营业额统计(Splay树)相关推荐
- [BZOJ 1588] [HNOI 2002] 营业额统计
1588: [HNOI2002]营业额统计 Time Limit: 5 SecMemory Limit: 162 MB Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任 ...
- [BZOJ 1588][HNOI 2002] 营业额统计
这果然是在那个没有STL的年代出的题 1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MB Submit: 16648 Solv ...
- HNOI 2002 营业额统计
评测地点:http://www.lydsy.com/JudgeOnline/problem.php?id=1588 简单题,splay 题意: 按顺序给出一些数,找出距离当前数最近的数的差,将这些差求 ...
- HYSBZ 1588 营业额统计 伸展树
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1588 题意: Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任 ...
- [HNOI2002]营业额统计 Splay tree入门题
[HNOI2002]营业额统计 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1588 [HNOI2002]营业额统计 Time Limit ...
- HYSBZ - 1588 营业额统计(Splay)
题目链接:点击查看 题目大意:给出 n 天的销售额,每天的销售额都需要与前面所有天中,找到与自己相差最小的销售额,并累加其差值的绝对值,输出累加后的答案 题目分析:其实用set乱搞就可以了,为了练习数 ...
- CJOJ 1308 【HNOI 2002 】营业额统计 / CodeVS 1296 营业额统计
CJOJ 1308 [HNOI 2002 ]营业额统计 / CodeVS 1296 营业额统计 Description Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并 ...
- treap树---营业额统计
台州学院 2924 描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况.Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额 ...
- [Splay伸展树]splay树入门级教程
首先声明,本教程的对象是完全没有接触过splay的OIer,大牛请右上角.. 首先引入一下splay的概念,他的中文名是伸展树,意思差不多就是可以随意翻转的二叉树 PS:百度百科中伸展树读作:BoGa ...
最新文章
- RH5.4下samba共享配置实例(3)
- 遍历List 删除某条数据
- Go语言实战读书笔记
- linux 修改用户组_linux小白到大神的成长之路:linux系统用户组的管理!
- 家用、商用、工业交换机的用途与区别
- 总有一些人在祖国需要的时候挺身而出
- 分治 —— 莫队算法
- php青茶什么时候拆,茶叶保质期多长时间 黑绿红白黄青茶的保质期为多久
- ssms应用程序错误_来自应用程序的查询计划与SSMS不同时的性能故障排除
- Memcached源码分析 - 内存存储机制Slabs(5)
- 女程序员上班第一件事:调整IDE颜色以适配今天的衣着妆容
- jQuery设置文本框回车事件
- 圈小猫游戏与天使问题——容错值理论
- Python实现多条.txt文本数据合并为.csv文件数据
- PCI Expansion ROMs
- 系统封装到底有个什么用
- iphone计算机设置,苹果手机怎么设置其他铃声
- 华为推送 简介 集成 MD
- 服务器怎么使用无线网卡,无线上网卡怎么用
- 编译原理—语法制导翻译、S属性、L属性、自上而下、自下而上计算