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最近被公司升任为营业部经理,他上 ...
随机推荐
- wcf实例模型(随记)
-----------------------------------------实例模型: 1.InstanceContentextMode: -------PerCall(单调):无状态,每次调用 ...
- 学点c++
描述现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复:还知道这个长方形的宽和长,编号.长.宽都是整数:现在要求按照一下方式排序(默认排序规则都是从小到大): 1.按照编号从小到大排序 2. ...
- js理解
js-提前声明和new操作符理解 1.提前声明:声明变量后,js会把声明部分提前到作用域前面. var a=1; function aheadOfStatement(){ alert(a); va ...
- NLP startup material
The Association for Computational Linguistics(ACL,URL:http://aclweb.org/) Computational Linguistics( ...
- 【WCF系列一】WCF入门教程(图文) VS2012
WCF的全称是Windows Communication Foundation,从英文名称上看,WCF就是基于Windows下一种通讯的基础架构.利用WCF能够实现基于Windows下的各种通讯技术的 ...
- ORACLE总结系列1--network文件夹里的admin的三个文件信息
sqlnet.ora 作用类似于linux或者其他unix的 nsswitch.conf文件,通过这个文件来决定怎么样找一个连接中出现的连接字符串(connect descriptor) 假如sqln ...
- 生成自己的Webapi帮助文档(一)
最近Webapi接口的开发刚刚进入尾声,随之而来的是让用户知道接口的详细参数信息,看过淘宝的接口文档,但网上没找到他的实现方式 虽然新建Webapi时C#也会给你一个帮助文档的Area,但是总觉得有些 ...
- Binder机制,从Java到C (10. Binder驱动)
Binder驱动的代码都在kernel里面,这里就简单讲一下里面涉及到的几个东西: 1.MemoryBinder其实本质上就是一中数据传输方式,这种方式是通过binder driver实现的. 我们知 ...
- C++构造 下一个排列 的函数
今天围观刘汝佳神犇的白书发现了一个好用的函数: next_permutation(); 可以用于可重, 或者不可重集, 寻找下一个排列. 时间复杂度尚不明. //适用于不可重和可重集的排列. # in ...
- c#实现microsoft账号登入授权(OAuth 2.0)并获取个人信息
本博主要介绍microsoft 账号授权(OAuth 2.0)登入并获取用户信息的过程,因为写过google账号授权登入的过程,所以这里就简单介绍一下,google授权登入参考地址:http://ww ...