splay 1296 营业额统计
有一个点超时,确实是个很简单的splay
#include<cstdio>
#include<iostream>
using namespace std;
int n,shu[1000006][2],root,size,b1,b2,sum1,sum[1000005],zhi[1000005];
int fa[1000005];
void xuan(int a1)
{
int a2,a3,l,r;
a2=fa[a1];
a3=fa[a2];
if(a2==root)
root=a1;
else
if(a2==shu[a3][0])
shu[a3][0]=a1;
else
shu[a3][1]=a1;
if(shu[a2][0]==a1)
l=0;
else
l=1;
r=l^1;
fa[a1]=a3;
fa[a2]=a1;
shu[a2][l]=shu[a1][r];
shu[a1][r]=a2;
fa[shu[a2][l]]=a2;
return;
}
void zhuan(int a1)
{
int a2,a3;
for(;a1!=root;)
{
a2=fa[a1];
a3=fa[a2];
if(a2!=root)
if(a2==shu[a3][0]^a1==shu[a2][0])
xuan(a1);
else
xuan(a2);
xuan(a1);
}
}
void jia(int &a1,int a2,int a3)
{
if(a1==0)
{
size++;
a1=size;
zhi[a1]=a2;
sum[a1]=1;
fa[a1]=a3;
zhuan(a1);
return;
}
if(zhi[a1]==a2)
sum[a1]++;
else
if(zhi[a1]<a2)
jia(shu[a1][1],a2,a1);
else
jia(shu[a1][0],a2,a1);
return;
}
void qian(int a1,int a2)
{
if(a1==0)
return;
if(zhi[a1]==a2)
b1=a2;
else
if(zhi[a1]<a2)
{
b1=zhi[a1];
qian(shu[a1][1],a2);
}
else
qian(shu[a1][0],a2);
return;
}
void hou(int a1,int a2)
{
if(a1==0)
return;
if(zhi[a1]==a2)
b2=a2;
else
if(zhi[a1]>a2)
{
b2=zhi[a1];
hou(shu[a1][0],a2);
}
else
hou(shu[a1][1],a2);
return;
}
int main()
{
scanf("%d",&n);
scanf("%d",&sum1);
jia(root,sum1,0);
for(int i=1;i<n;i++)
{
int a1;
scanf("%d",&a1);
b1=-1;
b2=-1;
qian(root,a1);
hou(root,a1);
if(b1==-1)
sum1+=b2-a1;
else
if(b2==-1)
sum1+=a1-b1;
else
if(a1-b1<=b2-a1)
sum1+=a1-b1;
else
sum1+=b2-a1;
jia(root,a1,0);
}
printf("%d",sum1);
return 0;
}
splay 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最近被公司升任为营业部经理, ...
- codevs 1296 营业额统计 (splay 点操作)
题目大意 每次加入一个值,并且询问之前加入的数中与该数相差最小的值. 答案输出所有相差值的总和. 解题分析 = = 参考程序 #include <bits/stdc++.h> using ...
- 【wikioi】1296 营业额统计
题目链接:http://www.wikioi.com/problem/1296/ 算法:Splay 这是非常经典的一道题目,用Splay树来维护营业额,每天的最小波动值就等于 min{树根-树根的前驱 ...
- treap 1296 营业额统计
有一个点答案错误,求大神指教 #include<cstdio>#include<iostream>#include<cstdlib>#include<ctim ...
- AC日记——营业额统计 1296 codevs
1296 营业额统计 2002年 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 查看运行结果 题目描述 Description Tiger ...
- AC日记——营业额统计 codevs 1296 (splay版)
营业额统计 思路: 每次,插入一个点: 然后找前驱后继: 来,上代码: #include <cmath> #include <cstdio> #include <iost ...
- NOI 2002 营业额统计 (splay or fhq treap)
Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每 ...
随机推荐
- PB Event ID 含义 内容浅析
Event ID 含义 内容浅析 event可以用pb自带的id,自动触发事件,而function就需要你去调用了,返回值多种多样 单选或多选按钮消息(前缀:pbm_bm) pbm_bmgetchec ...
- idea 中 下载源码:Sources not download for:
使用idea 下载源码出现:Sources not found for: 解决方案:在对应的pom.xml 文件中打开 terminal,执行 mvn命令: mvn dependency:source ...
- Powershell学习笔记:(二)、基础知识
从Window7以后,WIndows系统都自带了Windows PowerShell. 自带版本如下 WIndow7 2.0 WIndow8 3.0 Window8.1 4.0 Win ...
- RabbitMq 报错记录
只记录本人当时遇到的情况,仅作参考 添加消息队列报错:The connection cannot support any more channels. Consider creating a new ...
- wstngfw中配置freeradius
wstngfw中配置freeradius Radius为各种网络设备和服务提供了一个认证来源. Radius认证常用于***.入网门户.交换机.路由器和防火墙.Radius认证比在网络上的不同设备跟踪 ...
- 数据结构与算法---排序算法(Sort Algorithm)
排序算法的介绍 排序也称排序算法 (Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程. 排序的分类 1) 内部排序: 指将需要处理的所有数据都加载 到内部存储器(内存)中进 ...
- 记一次SQL PLUS 不能登录的异常处理
记一次SQL PLUS 不能登录的异常处理 现象 通过远程PLSQL Developer 访问数据发现卡死没响应. 通过Sqlplus 访问数据同样hang死在登录界面,且不能通过Ctrl+C取消 [ ...
- RMAN恢复数据文件
实验之前先备份数据库 RMAN>backup database; 在操作系统中删除数据文件 5 SQL> startup ORACLE 例程已经启动. Total System Globa ...
- Python基础——__name__变量
转自:https://blog.csdn.net/u011511601/article/details/53504355 Python使用缩进对齐组织代码的执行,所有没有缩进的代码,都会在载入时自动执 ...
- Makefile中 的 phony target,empty target
phony target Makefile的语法很简单 <target> : <prerequisites> [tab] <commands> 目标.先决条件.命令 ...