营业额统计(SBT)
题目:
Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。
输入
第一行为正整数 ,表示该公司从成立一直到现在的天数
接下来的n行每行有一个整数(一定有数据小于〇) ,表示第i天公司的营业额。
输出
输出文件仅有一个正整数,即每一天的最小波动值之和。答案保证在int范围内
营业额统计(SBT)
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
using namespace std;
#define MAXN 100005
#define INF 10000000
int sz[MAXN],ch[MAXN][2],val[MAXN],root,fa[MAXN],n,cnt;
#define abs(a) ((a)>0?(a):-(a))
void rotato(int &r,bool flag)
{
int t=ch[r][!flag];
if(!t)return;
ch[r][!flag]=ch[t][flag];
ch[t][flag]=r;
sz[r]=sz[ch[r][0]]+sz[ch[r][1]]+1;
sz[t]=sz[ch[t][0]]+sz[ch[t][1]]+1;
r=t;
} void maintain(int &r,bool flag)
{
if(!flag)
{
if(sz[ch[ch[r][0]][0]]>sz[ch[r][1]])
rotato(r,1);
else if(sz[ch[ch[r][0]][1]]>sz[ch[r][1]])
{
rotato(ch[r][0],0);
rotato(r,1);
}
else return;
}
else
{
if(sz[ch[ch[r][1]][1]]>sz[ch[r][0]])
rotato(r,0);
else if(sz[ch[ch[r][1]][0]]>sz[ch[r][0]])
{rotato(ch[r][1],1);
rotato(r,0);
}
else return;
}
maintain(ch[r][0],0);
maintain(ch[r][1],1);
maintain(r,0);
maintain(r,1);
}
void insert(int &r,int t)
{
if(!r)
{
cnt++;
val[cnt]=t;
sz[cnt]=1;
r=cnt;
return;
}
if(val[r]==t)
return;
else if(val[r]>t)
insert(ch[r][0],t);
else insert(ch[r][1],t);
maintain(r,t>=val[r]);
}
int find(int r,int t)
{
int ans=INF;
while(r)
{
if(abs(val[r]-t)<ans)
ans=abs(val[r]-t);
if(t<val[r])
r=ch[r][0];
else if(t>val[r])
r=ch[r][1];
else
break;
}
return ans;
}
int main()
{
int t,ans=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&t);
if(i>1)
{
int tmp=find(root,t);
ans+=tmp;
}
else ans=t;
insert(root,t);
}
printf("%d\n",ans);
return 0;
}
AVL代码:
#include <iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
#define MAXN 100005
#define INF 123456789
int ans,tmpdiff=INF,cnt,root,dayv;
struct node
{
int lch,rch,num,h;
}tree[MAXN];
int sum;
int n,m;
void zig(int &r)
{
int t=tree[r].lch;
tree[r].lch=tree[t].rch;
tree[t].rch=r;
tree[r].h=max(tree[tree[r].lch].h,tree[tree[r].rch].h)+1;
tree[t].h=max(tree[tree[t].lch].h,tree[tree[t].rch].h)+1;
r=t;
}
void zag(int &r)
{
int t=tree[r].rch;
tree[r].rch=tree[t].lch;
tree[t].lch=r;
tree[r].h=max(tree[tree[r].lch].h,tree[tree[r].rch].h)+1;
tree[t].h=max(tree[tree[t].lch].h,tree[tree[t].rch].h)+1;
r=t;
}
void insert(int &root,int x)
{
if(root==0)
{
tree[++cnt].num=x;
tree[cnt].h=1;
root=cnt;
return;
}
tmpdiff=min(tmpdiff,abs(x-tree[root].num));
if(x<tree[root].num)
insert(tree[root].lch,x);
else if(x>tree[root].num)
insert(tree[root].rch,x);
else return;
tree[root].h=max(tree[tree[root].lch].h,tree[tree[root].rch].h)+1;
if(tree[tree[root].lch].h-tree[tree[root].rch].h>1)
{
if(x<tree[tree[root].lch].num)
{
zig(root);
}
else
{
zag(tree[root].lch);
zig(root);
}
}
else if(tree[tree[root].rch].h-tree[tree[root].lch].h>1)
{
if(x>tree[tree[root].rch].num)
zag(root);
else
{
zig(tree[root].rch);
zag(root);
}
}
tree[root].h=max(tree[tree[root].lch].h,tree[tree[root].rch].h)+1;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&dayv);
if(i==1)ans+=dayv;
tmpdiff=INF;
insert(root,dayv);
if(tmpdiff!=INF)
ans+=tmpdiff; }
printf("%d",ans);
return 0;
}
营业额统计(SBT)的更多相关文章
- BZOJ1588: [HNOI2002]营业额统计[BST]
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 14151 Solved: 5366[Submit][Sta ...
- 【Treap】bzoj1588-HNOI2002营业额统计
一.题目 Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司 ...
- NOI 2002 营业额统计 (splay or fhq treap)
Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每 ...
- BZOJ 1588: [HNOI2002]营业额统计
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 14396 Solved: 5521[Submit][Sta ...
- 营业额统计(bzoj1588)
Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每 ...
- BZOJ 1588: [HNOI2002]营业额统计 双向链表 / splay / treap
1588: [HNOI2002]营业额统计 Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger ...
- Splay树-Codevs 1296 营业额统计
Codevs 1296 营业额统计 题目描述 Description Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司 ...
- 【BZOJ-1588】营业额统计 Splay
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 12485 Solved: 4508[Submit][Sta ...
- BZOJ1588 HNOI2002 营业额统计 [Splay入门题]
[HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 4128 Solved: 1305 Description 营业额统计 ...
随机推荐
- Centos安装完MariaDB后启动不了 MySQL is not running, but lock file (/var/lock/subsys/mysql) exists
[root@admin-node subsys]# service mysql startStarting MySQL. ERROR! [root@admin-node subsys]# servic ...
- Centos7搭建java+mysql环境
前几天买了个国外的vps,打算用来练练手,准备安装mysql+jdk+tomcat+git,然后就从网上找些资料开始安装. 1.准备工具 首先,需要连接到centos,这里我用的连接工具是xshell ...
- 【Mocha.js 101】Mocha 入门指南
序 说到质量控制,不得不提起测试驱动开发(TDD)和行为驱动开发(BDD).随着敏捷软件开发的推行,软件质量控制的重担也逐渐从测试工程师转向了研发工程师.测试驱动也随之悄然而生,成为了敏捷开发中重要的 ...
- XML代码生成器——XMLFACTORY 简介(二)
XML代码生成器——XMLFACTORY 简介(二) 因为春节和项目上线的原因,离写上一篇文章的时间已经好久了. 不知道是事情太多了,还是自已效率太低了.总之是时间不够用. 哎,苦逼的程序员 ...
- 第三个Sprint冲刺事后诸葛亮报告
用户反馈:还好吧. 用户数量:4 团队改进建议:思维局限太大,技术需要革新. 1.每个成员第一个sprint阶段有何需要改进? 成员 需要改进 邵家文 需要提高自己的工作效率,与创新能力,解决问题的能 ...
- ansible代码分析第一篇--主文件—ansible分析
2016年2月23日,学习,分析ansible代码 ansible是一种运维中使用的批量部署的工具,它本身是一种框架,具体的部署和架构分析,下面这篇文章讲的不错. http://os.51cto.co ...
- CS0016: 未能写入输出文件“c:\WINDOWS\Microsoft.NET\Framework\.。。”--“拒绝访问
aspx 常见错误 CS0016: 未能写入输出文件“c:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/... ...
- js跳转传递参数
额,利用j获取了GridView中选中行数据后,通过JavaScript做跳转,传递参数的时候发现,当参数有中文的时候就会乱码, 当然出现这种情况的时候就需要对跳转的url进行编码 var urlX ...
- linux5个搜索命令
概要 linux中主要有5个文件查找命令:find.locate.whereis.which.type.find最为强大,但耗时较长.locate可看做find的精简版,但是它的速度非常快.where ...
- 第六篇T语言实例开发,多点找色应用
---恢复内容开始--- 多点找色应用 文字,图形特征的获取 多点找色 功能原型 窗口多点找色(窗口句柄,x1,y1,x2,y2,颜色值,色点组,相似度,方向,返回x,返回y) 功能说明 根据指定的多 ...