AC日记——营业额统计 1296 codevs
Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。
Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况出现了问题。经济管理学上定义了一种最小波动值来衡量这种情况:
该天的最小波动值 = min{|该天以前某一天的营业额-该天营业额|}
当最小波动值越大时,就说明营业情况越不稳定。
而分析整个公司的从成立到现在营业情况是否稳定,只需要把每一天的最小波动值加起来就可以了。你的任务就是编写一个程序帮助Tiger来计算这一个值。
第一天的最小波动值为第一天的营业额。
第一行为正整数n(n<=32767),表示该公司从成立一直到现在的天数,接下来的n行每行有一个正整数ai(ai<=1000000),表示第i天公司的营业额。
输出文件仅有一个正整数,即每天最小波动值之和,小于231
6
5
1
2
5
4
6
12
结果说明:5+|1-5|+|2-1|+|5-5|+|4-5|+|6-5|=5+4+1+0+1+1=12
思路:
裸treap模板;
支持插入,寻找前驱、后继操作;
每次插入一个点
然后寻找这个点的前驱和后继,比较哪个的波动小然后累加
来,上代码:
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm> using namespace std; struct TreeNode {
int key,fix,weight,size; TreeNode *left,*right;
}; class TreapType {
private:
TreeNode *null,*root,*start; int n,if_z,pos,ans; char Cget; inline void read_int(int &now)
{
now=,if_z=,Cget=getchar();
while(Cget>''||Cget<'')
{
if(Cget=='-') if_z=-;
Cget=getchar();
}
while(Cget>=''&&Cget<='')
{
now=now*+Cget-'';
Cget=getchar();
}
now*=if_z;
} public:
TreapType()
{
null=new TreeNode;
null->left=null;
null->right=null;
root=null;
start=new TreeNode;
start->key=0x7ffffff;
start->left=null;
start->right=null;
read_int(n);
read_int(pos);
ans+=abs(pos);
Insert(root,pos);
for(int i=;i<=n;i++)
{
read_int(pos);
Insert(root,pos);
int pre=Predecessor(root,pos,start);
int suc=Successor(root,pos,start);
ans+=min(abs(pre-pos),abs(suc-pos));
}
printf("%d\n",ans);
} void Rotato_Left(TreeNode *&now)
{
TreeNode *tmp=now->right;
now->right=tmp->left;
tmp->left=now;
now=tmp;
now->left->size=now->left->left->size+now->left->weight+now->left->right->size;
now->size=now->left->size+now->right->size+now->weight;
} void Rotato_Right(TreeNode *&now)
{
TreeNode *tmp=now->left;
now->left=tmp->right;
tmp->right=now;
now=tmp;
now->right->size=now->right->left->size+now->right->weight+now->right->left->size;
now->size=now->left->size+now->weight+now->right->size;
} void Insert(TreeNode *&now,int key)
{
if(now==null)
{
now=new TreeNode;
now->fix=rand();
now->key=key;
now->left=null;
now->right=null;
now->size=;
now->weight=;
return ;
}
if(now->key==key)
{
now->weight++;
}
else if(now->key<key)
{
Insert(now->right,key);
if(now->right->fix>now->fix) Rotato_Left(now);
}
else if(now->key>key)
{
Insert(now->left,key);
if(now->left->fix>now->fix) Rotato_Right(now);
}
now->size=now->left->size+now->right->size+now->weight;
} int Predecessor(TreeNode *&now,int key,TreeNode *&optimal)
{
if(now==null) return optimal->key;
if(now->key==key)
{
if(now->weight>) return key;
else return Predecessor(now->left,key,optimal);
}
else
{
if(now->key<key) return Predecessor(now->right,key,now);
else return Predecessor(now->left,key,optimal);
}
} int Successor(TreeNode *&now,int key,TreeNode *&optimal)
{
if(now==null) return optimal->key;
if(now->key==key)
{
if(now->weight>) return key;
else return Successor(now->right,key,optimal);
}
else
{
if(now->key>key) return Successor(now->left,key,now);
else return Successor(now->right,key,optimal);
}
}
};
class TreapType do_; int main()
{
return ;
}
AC日记——营业额统计 1296 codevs的更多相关文章
- AC日记——营业额统计 codevs 1296 (splay版)
营业额统计 思路: 每次,插入一个点: 然后找前驱后继: 来,上代码: #include <cmath> #include <cstdio> #include <iost ...
- AC日记——接龙游戏 codevs 1051
1051 接龙游戏 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 给出了N个单词,已经按长度排好了序.如果 ...
- AC日记——数字统计 openjudge 1.5 41
41:数字统计 总时间限制: 1000ms 内存限制: 65536kB 描述 请统计某个给定范围[L, R]的所有整数中,数字2出现的次数. 比如给定范围[2, 22],数字2在数2中出现了1次, ...
- AC日记——最优贸易 codevs 1173
题目描述 Description [问题描述]C 国有n 个大城市和m 条道路,每条道路连接这n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这m 条道路中有一部分为单向通行的道路 ...
- AC日记——地鼠游戏 codevs 1052
1052 地鼠游戏 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 王钢是一名学习成绩优异的学生,在平 ...
- AC日记——鬼谷子的钱袋 codevs 2998
2998 鬼谷子的钱袋 2006年省队选拔赛湖南 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 鬼谷子非常聪明,正 ...
- AC日记——舒适的路线 codevs 1001 (并查集+乱搞)
1001 舒适的路线 2006年 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description Z小镇是 ...
- AC日记——逃跑的拉尔夫 codevs 1026 (搜索)
1026 逃跑的拉尔夫 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 年轻的拉尔夫开玩笑地从一 ...
- AC日记——自然数和分解 codevs 2549
自然数和分解 思路: 水题: 代码: #include <bits/stdc++.h> using namespace std; ][]; int main() { cin>> ...
随机推荐
- ICSharpCode.SharpZipLib.dll
using ICSharpCode.SharpZipLib.Checksums; using ICSharpCode.SharpZipLib.Zip; namespace { /// <summ ...
- 内存管理小结(2)--伙伴系统API
伙伴系统分配内存以2的整数幂次的页数为单位.提供的API主要分为分配类与释放类. 1.分配类 1.1unsigned long __get_free_pages(gfp_t gfp_mask, uns ...
- Postgres安装详解
PG安装 一.基础包的安装(yum源的配置,可以采用光盘挂载,及ftp yum源,针对外网环境忽略此步): yum -y install wget tcpdump glibc libgcc gcc g ...
- [BZOJ1503]郁闷的出纳员(Splay)
Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ...
- sql优化系列1
sql中索引是否会用到,进而影响查询效率. 带通配符(%)的like语句 1.不能用null作索引,任何包含null值的列都将不会被包含在索引中.即使索引有多列这样的情况下,只要这些列中有一列含有nu ...
- SXCPC2018 nucoj2007 和Mengjiji一起攻克难关
problem #include <algorithm> #include <iostream> #include <cstdio> using namespace ...
- Ntdsutil.exe
Ntdsutil.exe 编辑 本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! Ntdsutil.exe 是一个为 Active Directory 提供管理设施的命令行工具 ...
- 输出1到最大的N位数 【微软面试100题 第六十五题】
题目要求: 输入数字n,按顺序输出从1到最大的n位10进制数. 例如,输入3,则输出1.2.3....999(最大的3位数). 参考资料:剑指offer第12题. 题目分析: 如果我们在数字前面补0的 ...
- [网站公告]11月26日00:00-04:00阿里云RDS升级
大家好,11月26号00:00-04:00(今天夜里),阿里云将对我们所用的SQL Server RDS实例所在的物理主机做升级操作(目前博客园整站运行于阿里云上),升级期间RDS实例会有2次闪断,每 ...
- IOS开发---菜鸟学习之路--(四)-登陆界面
本篇的内容其实大家 参照橘子的那本开发的书的话 上面讲解的是更详细的 一些实现. 我这边唯一的区别就是 做了网络数据的获取 以及 验证成功后 进行界面的跳转.. 第四篇了 本篇主讲登陆模块 首先先放 ...