营业额统计(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 营业额统计 ...
随机推荐
- SQLHelper
今天学习了.net后,经过老师的一番讲解,似乎对它越来越渴望了,希望自己在接下来的学习当中,能很好的驾驭.net,加油吧, 下面我分享一个操作SQL数据库的代码大全,谢谢观赏.嘿嘿,还是比较长的哦, ...
- UE4 VR GUI实现 参考(UMG AND VR)
Note:4.13以后版本VR UI采用 WidgetComponent + WidgetInteractionComponent可轻松实现交互 Blueprint Demo: https://for ...
- java java.lang.NoClassDefFoundError 的解决办法
以简单而经典的 "HelloWorld.java" 为例 不含包层次的HelloWorld.Java public class HelloWorld { public static ...
- 1、MVC和EF中的 Model First 和 Code First
准备:先引入MVC和EF的dll包 *命令方法:打开工具——库程序包管理器——程序包管理器控制台,选择自己的项目 a) Install-Package EntityFramework -Ver ...
- web api 初体验 解决js调用跨域问题
跨域界定 常见跨域: 同IP不同端口: http:IP:8001/api/user http:IP:8002/api/user 不同IP不同端口: http://172.28.20.100:8 ...
- 一道google面试题
输入n,把1-n分成两个和相等的子集,有多少种分法 想了个dp,直接背包也行 #include <iostream> #include <cstdio> using names ...
- web页面放到手机页面,缩放问题
有时候写页面样式不规范,很多页面元素写死尺寸时,web页面尺寸比较大放到移动端访问时,就背缩放了,div或者按钮变得好小 可以加段js,效果会好点 <script> ! function( ...
- 缓存和sd卡的路径(原)
在需要存储的时候,路径的问题是初学者比较迷惑的,下面是对于getCacheDir().getFilesDir().getExternalFilesDir().getExternalCacheDir() ...
- 解析C语言结构体对齐(内存对齐问题)
C语言结构体对齐也是老生常谈的话题了.基本上是面试题的必考题.内容虽然很基础,但一不小心就会弄错.写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的 ...
- Java笔记9-正则表达式
提纲: 1.正则表达式 2.常见的异常 3.内部类------------------------------------------------------------------JDK 1.4以后 ...