bzoj1588: [HNOI2002]营业额统计(splay)
1588: [HNOI2002]营业额统计
题目:传送门
题解:
复习splay所以来刷个水。。。
题目描述不是特别清楚:应该是找第i天以前一个最小的营业额和第i天做差的最小值作为第i天的最小波动值
那就直接找前驱后继啊(不过定义要改一下,是可以相同的)
代码:
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
struct node
{
int d,n,c,f,son[];
}tr[];int len,root;
void add(int d,int f)
{
len++;tr[len].d=d;tr[len].n=tr[len].c=;
tr[len].son[]=tr[len].son[]=;tr[len].f=f;
if(d<tr[f].d)tr[f].son[]=len;
else tr[f].son[]=len;
}
void update(int x)
{
int lc=tr[x].son[],rc=tr[x].son[];
tr[x].c=tr[lc].c+tr[rc].c+tr[x].n;
}
int findip(int d)
{
int x=root;
while(tr[x].d!=d)
{
if(d<tr[x].d)
{
if(tr[x].son[]==)break;
else x=tr[x].son[];
}
else
{
if(tr[x].son[]==)break;
else x=tr[x].son[];
}
}
return x;
}
void rotate(int x,int w)
{
int f=tr[x].f,ff=tr[f].f;
int r,R;
r=tr[x].son[w],R=f;
tr[R].son[-w]=r;
if(r!=)tr[r].f=R; r=x,R=ff;
if(tr[R].son[]==f)tr[R].son[]=r;
else tr[R].son[]=r;
tr[r].f=R; r=f,R=x;
tr[R].son[w]=r;
tr[r].f=R; update(f);update(x);
}
void splay(int x,int rt)
{
while(tr[x].f!=rt)
{
int f=tr[x].f,ff=tr[f].f;
if(ff==rt)
{
if(tr[f].son[]==x)rotate(x,);
else rotate(x,);
}
else
{
if(tr[ff].son[]==f && tr[f].son[]==x)rotate(f,),rotate(x,);
else if(tr[ff].son[]==f && tr[f].son[]==x)rotate(f,),rotate(x,);
else if(tr[ff].son[]==f && tr[f].son[]==x)rotate(x,),rotate(x,);
else if(tr[ff].son[]==f && tr[f].son[]==x)rotate(x,),rotate(x,);
}
}
if(rt==)root=x;
}
void ins(int d)
{
if(root==)
{
add(d,);root=len;
return ;
}
int x=findip(d);
if(tr[x].d==d)
{
tr[x].n++;
update(x);
splay(x,);
}
else
{
add(d,x);
update(x);
splay(len,);
}
}
int findqianqu(int d)
{
int x=findip(d);splay(x,);
if(d<tr[x].d && tr[x].son[]!=)
{
x=tr[x].son[];
while(tr[x].son[]!=)x=tr[x].son[];
}
if(d<tr[x].d)x=;
return x;
}
int findhouji(int d)
{
int x=findip(d);splay(x,);
if(d>tr[x].d && tr[x].son[]!=)
{
x=tr[x].son[];
while(tr[x].son[]!=)x=tr[x].son[];
}
if(d>tr[x].d)x=;
return x;
}
int main()
{
int n;scanf("%d",&n);root=;
int ans=;int d;
scanf("%d",&d);ans+=d;ins(d);
for(int i=;i<=n;i++)
{
scanf("%d",&d);int ss=;
int lc=findqianqu(d),rc=findhouji(d);
if(lc!=)ss=abs(tr[lc].d-d);
if(rc!=)ss=min(abs(tr[rc].d-d),ss);
ans+=ss;ins(d);
}
printf("%d\n",ans);
return ;
}
bzoj1588: [HNOI2002]营业额统计(splay)的更多相关文章
- BZOJ1588 HNOI2002 营业额统计 [Splay入门题]
[HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 4128 Solved: 1305 Description 营业额统计 ...
- BZOJ1588 [HNOI2002]营业额统计 splay模板
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MB Submit: 16189 Solved: 6482 [Submit][S ...
- bzoj1588: [HNOI2002]营业额统计 splay瞎写
最近各种瞎写数论题,感觉需要回顾一下数据结构 写一发splay冷静一下(手速过慢,以后要多练练) 用splay是最直接的方法,但我感觉离散一波应该可以做出来(没仔细想过) 现在没有很追求代码优美,感觉 ...
- [bzoj1588][HNOI2002]营业额统计——splay
题目大意 你被要求编写一个数据结构,支援以下操作,操作在线. 插入一个元素 查询一个元素与之前插入元素的最小差值. 题解 一道模板题.我是写了一个pre和succ函数水过的.1A,比较高兴. 代码 # ...
- BZOJ1588: [HNOI2002]营业额统计[BST]
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 14151 Solved: 5366[Submit][Sta ...
- 【BZOJ-1588】营业额统计 Splay
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 12485 Solved: 4508[Submit][Sta ...
- 1588: [HNOI2002]营业额统计 (splay tree)
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 5783 Solved: 1859[Submit][Stat ...
- [HNOI2002]营业额统计 Splay tree入门题
题目连接:http://www.lydsy.com/JudgeOnline/problem.php?id=1588 1588: [HNOI2002]营业额统计 Time Limit: 5 Sec ...
- Bzoj 1588: [HNOI2002]营业额统计(splay)
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MB Description 营业额统计 Tiger最近被公司升任为营业部经理,他上 ...
随机推荐
- 爬虫之Urllib库的基本使用
官方文档地址:https://docs.python.org/3/library/urllib.html 什么是Urllib Urllib是python内置的HTTP请求库包括以下模块urllib.r ...
- arg max f(x) 含义
y = f(x) 是一般常见的函数式,如果给定一个x值,f(x)函数式会赋一个值給y. y = max f(x) 代表:y 是f(x)函式所有的值中最大的output. y = arg max f(x ...
- 获取远程请求的IP地址、本机Mac地址和客户端Mac地址
我在近期项目里面去记录异常日志时,用到了这两个地址,也是从网上和前辈那里学习到的,本人项目是MVC框架的,自己整理了一个公共方法类,包括获取远程客户端IP和Mac地址,以及获取本机Mac地址的方法,代 ...
- window下安装svn
下载 http://subversion.apache.org/ 注意:上边的黑窗口不要关闭! 如何校验svn服务有运行
- AJAX异步删除操作
@Ajax.ActionLink("删除", "Delete", new {id = user.Id}, ajaxOption) @{ var ajaxOpti ...
- Install opencv on Centos
研究centos 有很长一段时间了,一直没有写过这方面的感觉,今天在看到网友的一篇文章时,结合亲身体会就下面安装opencv的一些步骤与大家共享. CentOS OpenCV已被广泛应用但是也在不断的 ...
- 洛谷P2851 [USACO06DEC]最少的硬币The Fewest Coins(完全背包+多重背包)
题目描述 Farmer John has gone to town to buy some farm supplies. Being a very efficient man, he always p ...
- 拖动盒子demo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 部署Seafile服务
介绍 官网:https://www.seafile.com 客户端/服务端下载:https://www.seafile.com/download/ 中文安装教程(MySQL版):http://manu ...
- 找回消失的ubuntu启动选项
启动菜单消失不是第一次了,这一次还是记录下来吧 原文链接:http://blog.chinaunix.net/uid-26527046-id-3748986.html 在安装windows后安装的ub ...