treap 1296 营业额统计
有一个点答案错误,求大神指教
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
struct shu
{
int zhi,dui,l,r,sum1;
}a[32768];
int n,sum,root,size,ans;
void qian(int a1,int a2)
{
if(a1==0)
return;
if(a[a1].zhi==a2)
{
ans=a2;
return;
}
if(a[a1].zhi<a2)
{
ans=a[a1].zhi;
qian(a[a1].r,a2);
}
else
qian(a[a1].l,a2);
return;
}
void hou(int a1,int a2)
{
if(a1==0)
return;
if(a[a1].zhi==a2)
{
ans=a2;
return;
}
if(a[a1].zhi>a2)
{
ans=a[a1].zhi;
hou(a[a1].l,a2);
}
else
hou(a[a1].r,a2);
return;
}
void zuo(int &a1)
{
int t=a[a1].r;
a[a1].r=a[t].l;
a[t].l=a1;
a1=t;
return;
}
void you(int &a1)
{
int t=a[a1].l;
a[a1].l=a[t].r;
a[t].r=a1;
a1=t;
return;
}
void jia(int &a1,int a2)
{
if(a1==0)
{
size++;
a1=size;
a[a1].zhi=a2;
a[a1].sum1=1;
a[a1].dui=rand();
return;
}
if(a[a1].zhi==a2)
a[a1].sum1++;
else
if(a[a1].zhi<a2)
{
jia(a[a1].r,a2);
if(a[a[a1].r].dui<a[a1].dui)
zuo(a1);
}
else
{
jia(a[a1].l,a2);
if(a[a[a1].l].dui<a[a1].dui)
you(a1);
}
return;
}
int main()
{
scanf("%d",&n);
scanf("%d",&sum);
jia(root,sum);
for(int i=1;i<n;i++)
{
int a1;
scanf("%d",&a1);
int minn=0X7fffff;
ans=-1;
qian(root,a1);
if(ans>-1)
minn=a1-ans;
ans=-1;
hou(root,a1);
if(ans>-1)
minn=min(ans-a1,minn);
sum+=minn;
jia(root,a1);
}
printf("%d\n",sum);
return 0;
}
treap 1296 营业额统计的更多相关文章
- Splay树-Codevs 1296 营业额统计
Codevs 1296 营业额统计 题目描述 Description Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司 ...
- CJOJ 1308 【HNOI 2002 】营业额统计 / CodeVS 1296 营业额统计(STL,二分)
CJOJ 1308 [HNOI 2002 ]营业额统计 / CodeVS 1296 营业额统计(STL,二分) Description Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一 ...
- CodeVS 1296 营业额统计
1296 营业额统计2002年 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description Tiger最近被公司升任为营业部经理, ...
- treap树---营业额统计
台州学院 2924 描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况.Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额 ...
- 【wikioi】1296 营业额统计
题目链接:http://www.wikioi.com/problem/1296/ 算法:Splay 这是非常经典的一道题目,用Splay树来维护营业额,每天的最小波动值就等于 min{树根-树根的前驱 ...
- codevs 1296 营业额统计 (splay 点操作)
题目大意 每次加入一个值,并且询问之前加入的数中与该数相差最小的值. 答案输出所有相差值的总和. 解题分析 = = 参考程序 #include <bits/stdc++.h> using ...
- splay 1296 营业额统计
有一个点超时,确实是个很简单的splay#include<cstdio> #include<iostream> using namespace std; int n,shu[1 ...
- AC日记——营业额统计 1296 codevs
1296 营业额统计 2002年 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 查看运行结果 题目描述 Description Tiger ...
- 【Treap】bzoj1588-HNOI2002营业额统计
一.题目 Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司 ...
随机推荐
- C# winform解决解决窗体第一次设置为最大化后,点击最大化按钮窗体无法居中问题
public frmMain() { InitializeComponent(); //解决窗体第一次设置为最大化后,点击最大化按钮窗体无法居中问题 int x = Convert.ToInt32(( ...
- 闲谈--心态 (zhuan)
http://blog.csdn.net/marksinoberg/article/details/53261034 ***************************************** ...
- Hbase之取出行数据指定部分+版本控制(类似MySQL的Limit)
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.CellScanner; import org. ...
- spring 编程式事务管理和声明式事务管理
编程式事务管理 Spring 的编程式事务管理概述 在 Spring 出现以前,编程式事务管理对基于 POJO 的应用来说是唯一选择.用过 Hibernate 的人都知道,我们需要在代码中显式调用be ...
- git status 不可全信
不要相信git status,除非在操作的过程中, 看git仓库和本地.git之间的差异 -比如我现在在github上某个分支下上传了某个文件,但我在本地git status显示的还是working ...
- python int与str转换
string -> int 1. 10进制string 转换为 int int("12") 2. 16进制string 转换为 int int("12" ...
- Hive中JOIN操作
1. 只支持相等JOIN. 2. 多表连接当使用不同的列进行JOIN时,会产生多个MR作业. 3. 最后的表的数据是从流中读取,而前面的会在内存中缓存,因此最好把最大的表放在最后. SELECT /* ...
- Nginx + Tomcat 配置
Windows下Nginx的启动.停止等命令 在Windows下使用Nginx,我们需要掌握一些基本的操作命令,比如:启动.停止Nginx服务,重新载入Nginx等,下面我就进行一些简单的介绍.1.启 ...
- 当CanTK遇到PhoneGap
有朋友问能不能在CanTK和AppBuilder开发的APP里发送UDP数据,HTML5里只能用HTTPS/HTTP/WebSocket几种通讯方式,要使用UDP需要通过phonegap打包成APK等 ...
- CentOS7+JDK8编译Hadoop2.6.4
1. 下载相关软件 apache-maven-3.3.1-bin.tar.gz protobuf-2.5.0.tar.gz hadoop-2.6.4-src.tar.gz 2.配置好jdk8环境(请看 ...