bzoj1588: [HNOI2002]营业额统计 splay瞎写
最近各种瞎写数论题,感觉需要回顾一下数据结构
写一发splay冷静一下(手速过慢,以后要多练练)
用splay是最直接的方法,但我感觉离散一波应该可以做出来(没仔细想过)
现在没有很追求代码优美,感觉得先打的对打的快O(∩_∩)O
#include <bits/stdc++.h>
#define INF 1000000000
using namespace std;
int root,N,n,x;
int fa[],c[][],a[];
void rot(int x)
{
int fat=fa[x],k=c[fat][]==x;
c[fat][k]=c[x][!k];fa[c[x][!k]]=fat;
fa[x]=fa[fat];c[fa[fat]][c[fa[fat]][]==fat]=x;
fa[fat]=x;c[x][!k]=fat;
}
void splay(int x,int g)
{
for(int y;(y=fa[x])!=g;rot(x))
if(fa[y]!=g)
if((c[y][]==x)==(c[fa[y]][]==y)) rot(y);else rot(x);
if(g==) root=x;
}
int lower(int p)
{
if(!root) return ;
int ans=INF;
for(int i=root;i;(p>=a[i])?i=c[i][]:i=c[i][])
if(a[i]>=p)
ans=min(ans,a[i]);
return ans-p;
}
int upper(int p)
{
if(!root) return ;
int ans=-INF;
for(int i=root;i;(p>=a[i])?i=c[i][]:i=c[i][])
if(a[i]<=p)
ans=max(ans,a[i]);
return p-ans;
}
void add(int x)
{
a[++N]=x;c[N][]=c[N][]=;
if(!root)
{
root=N;
return;
}
for(int i=root;;)
if(x<=a[i])
if(!c[i][])
{
c[i][]=N,fa[N]=i;
splay(N,);
break;
}
else i=c[i][];
else
if(!c[i][])
{
c[i][]=N,fa[N]=i;
splay(N,);
break;
}
else i=c[i][];
}
int main()
{
scanf("%d",&n);int ans=;
for(int i=;i<=n;i++)
{
scanf("%d",&x);
if(i==) ans+=x;
else
ans+=min(upper(x),lower(x));
add(x);
}
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)
1588: [HNOI2002]营业额统计 题目:传送门 题解: 复习splay所以来刷个水... 题目描述不是特别清楚:应该是找第i天以前一个最小的营业额和第i天做差的最小值作为第i天的最小波动值 ...
- [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最近被公司升任为营业部经理,他上 ...
随机推荐
- Visual Studio 2015 & C#6.0
Visual Studio 2015 & C#6.0 试用报告,持续更新. 昨天早上看到了.net开源的消息,我是非常兴奋的,毕竟局限于Windows的.NET经常被人唾弃.VB暂且不 ...
- CSS边框阴影效果
ul { margin:5px 0 0 0; padding:0; list-style:none; width:300px; background:#f1f1f1; }li { border-lef ...
- [tarjan] hdu 3836 Equivalent Sets
主题链接: http://acm.hdu.edu.cn/showproblem.php? pid=3836 Equivalent Sets Time Limit: 12000/4000 MS (Jav ...
- 【【分享】深入浅出WPF全系列教程及源码
】
因为原书作者的一再要求,在此声明,本书中的部分内容引用了原书名为<深入浅出WPF>的部分内容,假设博文不能满足你现有的学习须要,能够购买正版图书! 本人10月份提出离职,可是交接非常慢,预 ...
- Linux Shell脚本入门--Uniq命令
uniq uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用.也就是说,为了使uniq起作用,所有的重复行必须是相邻的. uniq语法 [root@www ~]# uniq [ ...
- postal邮件发送(一):基本配置
前言 源码:https://github.com/andrewdavey/postal 文档:http://aboutcode.net/postal/ postal最大好处就是再也不用拼接html发送 ...
- 使用UpdatePanel控件
使用UpdatePanel控件(二) UpdatePanel可以用来创建丰富的局部更新Web应用程序,它是ASP.NET 2.0 AJAX Extensions中很重要的一个控件,其强大之处在于不用编 ...
- ASP.NET Identity登录原理 - Claims-based认证和OWIN
MVC5 - ASP.NET Identity登录原理 - Claims-based认证和OWIN 在Membership系列的最后一篇引入了ASP.NET Identity,看到大家对它还是挺感兴趣 ...
- C#事件与委托的区别
C#事件与委托的区别 1. 委托 事件是利用委托来定义的,因此先解释委托.委托是一个类,它与其他类如int,string等没有本质区别,int代表的是所有的整形,而string代表的是字符串,委托则代 ...
- 关于HTTP头标
对于HTTP中的头字段,我表示真的好麻烦,特找来一段资料共享.希望能对大家有用. HTTP的头域包括通用头,请求头,响应头和实体头四个部分.每个头域由一个域名,冒号(:)和域值三部分组成.域名是大小写 ...