bzoj 1588 平衡树 splay
1588: [HNOI2002]营业额统计
Time Limit: 5 Sec Memory Limit: 162 MB
Submit: 15446 Solved: 6076
[Submit][Status][Discuss]
Description
营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况出现了问题。经济管理学上定义了一种最小波动值来衡量这种情况: 该天的最小波动值 当最小波动值越大时,就说明营业情况越不稳定。 而分析整个公司的从成立到现在营业情况是否稳定,只需要把每一天的最小波动值加起来就可以了。你的任务就是编写一个程序帮助Tiger来计算这一个值。 第一天的最小波动值为第一天的营业额。 输入输出要求
Input
Output
输出文件仅有一个正整数,即Sigma(每天最小的波动值) 。结果小于2^31 。
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
该题数据bug已修复.----2016.5.15
- #include <bits/stdc++.h>
- #define ll long
- using namespace std;
- ll tim=,n,root,sum=;
- bool flag;
- struct node
- {
- ll father,left,right,data;
- } tree[];
- ll mins(ll aaa, ll bbb)
- {
- if(aaa<bbb)
- return aaa;
- else
- return bbb;
- }
- ll abss(ll x)
- {
- if(x<)
- return -x;
- else
- return x;
- }
- void rightrotate(ll x)
- {
- ll y=tree[x].father;
- ll z=tree[y].father;
- tree[y].left=tree[x].right;
- if(tree[x].right!=-)
- {
- tree[tree[x].right].father=y;
- }
- tree[x].father=z;
- if(z!=-)
- {
- if(tree[z].left==y) tree[z].left=x;
- else tree[z].right=x;
- }
- tree[x].right=y;
- tree[y].father=x;
- }
- void leftrotate(ll x)
- {
- ll y=tree[x].father;
- ll z=tree[y].father;
- tree[y].right=tree[x].left;
- if(tree[x].left!=-)
- {
- tree[tree[x].left].father=y;
- }
- tree[x].father=z;
- if(z!=-)
- {
- if(tree[z].left==y) tree[z].left=x;
- else tree[z].right=x;
- }
- tree[x].left=y;
- tree[y].father=x;
- }
- void splay(ll x)
- {
- while(tree[x].father!=-)
- {
- ll y=tree[x].father;
- ll z=tree[y].father;
- if(z==-)
- {
- 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;
- }
- ll qq(ll x)
- {
- ll y=tree[x].left;
- if(y==-) return y;
- while(tree[y].right!=-) y=tree[y].right;
- return y;
- }
- ll hj(ll x)
- {
- ll y=tree[x].right;
- if(y==-) return y;
- while(tree[y].left!=-) y=tree[y].left;
- return y;
- }
- int BST_insert(ll dat,ll x)
- {
- if(dat==tree[x].data)
- {
- flag=false ;
- splay(x);
- return ;
- }
- if(dat<tree[x].data)
- {
- if(tree[x].left==-)
- {
- tree[x].left=tim;
- tree[tim].father=x;
- tree[tim].left=tree[tim].right=-;
- tree[tim].data=dat;
- }
- else
- BST_insert(dat,tree[x].left);
- }
- else
- {
- if(tree[x].right==-)
- {
- tree[x].right=tim;
- tree[tim].father=x;
- tree[tim].left=tree[tim].right=-;
- tree[tim].data=dat;
- }
- else
- BST_insert(dat,tree[x].right);
- }
- }
- ll insert1(ll dat)
- {
- flag=true;
- tim++;
- BST_insert(dat,root);
- if(flag==false) return ;
- splay(tim);
- ll q=qq(tim);
- ll h=hj(tim);
- ll minx=;
- if(q!=-) minx=mins(minx,abss(tree[q].data-dat));
- if(h!=-) minx=mins(minx,abss(tree[h].data-dat));
- sum+=minx;
- }
- int main()
- {
- int n;
- ll aa=;
- while(scanf("%d",&n)!=-)
- {
- sum=;
- tim=;
- scanf("%ld",&aa);
- sum=aa;
- tim++;
- tree[tim].father=-;
- tree[tim].left=tree[tim].right=-;
- tree[tim].data=aa;
- root=tim;
- for(ll i=; i<n; i++)
- {
- aa=;
- scanf("%ld",&aa);
- insert1(aa);
- }
- printf("%ld\n",sum);
- }
- return ;
- }
bzoj 1588 平衡树 splay的更多相关文章
- BZOJ 1588 平衡树 模板题
Treap: //By SiriusRen #include <cstdio> #include <algorithm> using namespace std; int si ...
- BZOJ3224/洛谷P3391 - 普通平衡树(Splay)
BZOJ链接 洛谷链接 题意简述 模板题啦~ 代码 //普通平衡树(Splay) #include <cstdio> int const N=1e5+10; int rt,ndCnt; i ...
- hiho #1329 : 平衡树·Splay
#1329 : 平衡树·Splay 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:小Hi,上一次你跟我讲了Treap,我也实现了.但是我遇到了一个关键的问题. ...
- 【BZOJ3224】Tyvj 1728 普通平衡树 Splay
Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. 查询x数的排名(若有多个相同的数 ...
- Hihocoder 1329 平衡树·Splay(平衡树)
Hihocoder 1329 平衡树·Splay(平衡树) Description 小Ho:小Hi,上一次你跟我讲了Treap,我也实现了.但是我遇到了一个关键的问题. 小Hi:怎么了? 小Ho:小H ...
- BZOJ 1588: [HNOI2002]营业额统计 双向链表
BZOJ 1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 512 MBSubmit: 9619 Solved: 3287 题目连接 ht ...
- 【阶梯报告】洛谷P3391【模板】文艺平衡树 splay
[阶梯报告]洛谷P3391[模板]文艺平衡树 splay 题目链接在这里[链接](https://www.luogu.org/problemnew/show/P3391)最近在学习splay,终于做对 ...
- luoguP3391[模板]文艺平衡树(Splay) 题解
链接一下题目:luoguP3391[模板]文艺平衡树(Splay) 平衡树解析 这里的Splay维护的显然不再是权值排序 现在按照的是序列中的编号排序(不过在这道题目里面就是权值诶...) 那么,继续 ...
- 平衡树——splay 三
前文链接: 平衡树--splay 一 - yi_fan0305 - 博客园 (cnblogs.com) 平衡树--splay 二 - yi_fan0305 - 博客园 (cnblogs.com) 再补 ...
随机推荐
- JavaScript(js)处理的HTML事件、键盘事件、鼠标事件
示例代码: HTML文件: <!DOCTYPE html><html lang="en"><head> <meta charset=&qu ...
- conda环境管理
查看环境 conda env list 创建环境 conda create -n python36 python=3.6 进入环境 source activate python36 activate ...
- loadrunner处理https请求
录制到的脚本如下: login() { lr_think_time(10); web_url("verifycode.jsp", "URL=https://192.168 ...
- Planning The Expedition(暴力枚举+map迭代器)
Description Natasha is planning an expedition to Mars for nn people. One of the important tasks is t ...
- Team Work总结 && OPP课程总结
团队作业总结 工作总结 本次大作业我在团队内的工作是:根据框架构建实现建筑类的功能,包括防御塔.水晶.泉水等建筑.根据架构框架以及结合各建筑的特点,利用继承和多态很快速的解决了一些基本的问题.然而在实 ...
- openssl 加密算法 CA 介绍
首先对于tftp服务的简要使用说明 (1)yum安装:tftp.tftp-server (2)启动tftp CentOS 6 service xinetd restart chkconfig tf ...
- Scrum Meeting Beta - 4
Scrum Meeting Beta - 4 NewTeam 2017/12/2 地点:新主楼F座二楼 任务反馈 团队成员 完成任务 计划任务 安万贺 完成了部分页面标题栏颜色的修改和字体的调整Iss ...
- (双人项目)四则运算 组员:杨钰宁 闫浩楠 开发语言:Python。
需求分析:1.适用人群:小学生. 2.能进行“+,—,*,/” 的四则运算.难度可以随时修改. 3.提交试卷后可以显示所得分数并显示错题个数. 4.可以显示答对的题及其打错的题的序号. 代码如下: i ...
- PAT 甲级 1005 Spell It Right
https://pintia.cn/problem-sets/994805342720868352/problems/994805519074574336 Given a non-negative i ...
- 对mysql联合索引中的字段进行合理排序
在MySQL的where条件中,有时会用到很多的条件,通常为了加快速度会把这些字段放到联合索引中,可以更快的提高搜索速度: 但是对联合索引中字段顺序的合理排序,便更能提高速度 例子:select * ...