BZOJ 1588 (treap)
题面
分析
语文题,主要是如何理解最小波动值
设当前天的营业额为x,则最小波动值为min(x-最大的<=x的数,最小的>=x的数-x)
然后用Treap维护序列就可以了
时间复杂度 $ O(n \log n) $
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#define lson tree[p].l
#define rson tree[p].r
#define INF 0x3f3f3f3f
#define maxn 100005
using namespace std;
int n;
struct node{
int l;
int r;
int cnt;
int size;
int val;
int dat;
}tree[maxn];
int tot=0;
int root;
int New(int val){
tree[++tot].cnt=1;
tree[tot].size=1;
tree[tot].val=val;
tree[tot].dat=rand();
return tot;
}
void update(int p){
tree[p].size=tree[lson].size+tree[rson].size+tree[p].cnt;
}
void build(){
New(-INF);
New(INF);
root=1;
tree[1].r=2;
update(root);
}
void zig(int &p){
int q=tree[p].l;
tree[p].l=tree[q].r;
tree[q].r=p;
p=q;
update(tree[p].r);
update(p);
}
void zag(int &p){
int q=tree[p].r;
tree[p].r=tree[q].l;
tree[q].l=p;
p=q;
update(tree[p].l);
update(p);
}
void insert(int &p,int val){
if(p==0){
p=New(val);
return;
}
if(tree[p].val==val){
tree[p].cnt++;
update(p);
return;
}
if(val<tree[p].val){
insert(lson,val);
if(tree[p].dat<tree[lson].dat) zig(p);
}else{
insert(rson,val);
if(tree[p].dat<tree[rson].dat) zag(p);
}
update(p);
}
int get_rank_by_val(int p,int val){
if(p==0) return 0;
if(tree[p].val==val) return tree[lson].size+1;
else if(val<tree[p].val){
return get_rank_by_val(lson,val);
}else{
return tree[lson].size+tree[p].cnt+get_rank_by_val(rson,val);
}
}
int get_val_by_rank(int p,int rank){
if(p==0) return INF;
if(tree[lson].size>=rank) return get_val_by_rank(lson,rank);
if(tree[lson].size+tree[p].cnt>=rank) return tree[p].val;
return get_val_by_rank(rson,rank-tree[lson].size-tree[p].cnt);
}
int main(){
long long ans=0;
int x,rk,low,up;
build();
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&x);
insert(root,x);
if(i==1) ans+=x;
else{
rk=get_rank_by_val(root,x);
low=get_val_by_rank(root,rk-1);
up=get_val_by_rank(root,rk+1);
ans+=min(abs(x-low),abs(x-up));
}
}
printf("%lld\n",ans);
}
BZOJ 1588 (treap)的更多相关文章
- BZOJ 1588: Treap 模板
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 12171 Solved: 4352 Description ...
- BZOJ 1588: [HNOI2002]营业额统计 双向链表
BZOJ 1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 512 MBSubmit: 9619 Solved: 3287 题目连接 ht ...
- BZOJ 1588: [HNOI2002]营业额统计 双向链表 / splay / treap
1588: [HNOI2002]营业额统计 Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger ...
- bzoj 1588: [HNOI2002]营业额统计 treap
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 13902 Solved: 5225[Submit][Sta ...
- 2018.07.06 BZOJ 1588: HNOI2002营业额统计(非旋treap)
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MB Description 营业额统计 Tiger最近被公司升任为营业部经理,他上 ...
- 【BZOJ 1588】[HNOI2002] 营业额统计(Treap)
Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每 ...
- BZOJ 1588 HNOI2002 营业额统计 裸Treap
题目大意:...题目描写叙述不全看这里好了 给定一个序列 对于每一个元素我们定义该数的最小波动值为这个数与前面全部数的差中的最小值(第一个数的最小波动值为第一个数本身) 求最小波动值之和 找近期的数仅 ...
- BZOJ 1588: [HNOI2002]营业额统计
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 14396 Solved: 5521[Submit][Sta ...
- BZOJ 1588:营业额统计(Splay)
http://www.lydsy.com/JudgeOnline/problem.php?id=1588 题意:中文题意. 思路:每一个点每一个点插入Splay,然后插入新的一个点之后,查这个节点的前 ...
随机推荐
- nodejs npm资料
安装淘宝的 cnpm : npm install --global cnpm 不想安装 cnpm 又想使用淘宝的服务器来下载 : npm install jquery --registry=http ...
- linux权限管理—基本权限
目录 Linux权限管理-基本权限 一.权限的基本概述 二.权限修改命令chmod 三.基础权限设置案例 四.属主属组修改命令chown Linux权限管理-基本权限 一.权限的基本概述 1.什么是权 ...
- static作用,静态成员变量和静态成员函数
static关键字有俩作用:(1).控制存储分配:(2).控制一个名字的可见性和连接. 随着C++名字空间的引入,我们有了更好的,更灵活的方法来控制一个大项目的名字增长. 在类的内部使用s ...
- 基于firebird的数据转存
功能:使用于相同的表从一个数据库转存到另一数据库: 方式:直连fdb并加载django,引用django的model完成: 原因:1.select * from *** 返回的数有很多None,直接i ...
- join优化
1.left outer join先执行连接操作,再将结果通过WHERE语句进行过滤 select s.ymd,s.symbol,s.price_close,d.dividend from stock ...
- Page.after
解释: Page.after可以增加Page级的切面,触发的时机是在所拦截的对应生命周期方法执行之后,也可以拦截所有页面上发生的事件(对于要拦截的事件,在swan文件上必须显示绑定了相应事件). 方法 ...
- [USACO17DEC]Barn Painting (树形$dp$)
题目链接 Solution 比较简单的树形 \(dp\) . \(f[i][j]\) 代表 \(i\) 为根的子树 ,\(i\) 涂 \(j\) 号颜色的方案数. 转移很显然 : \[f[i][1]= ...
- UX168办公本地环境维护记录
上班到公司 1.打考勤靠.或处理考勤异常 2.钉钉 3.邮件. 4.禅道系统 5.开启nginx.node.monogo服务 5.1.开启nginx服务 /etc/init.d/apache2 sto ...
- 【HDOJ6621】K-th Closest Distance(主席树,二分)
题意:给定一个长为n的序列,有m次强制在线的询问,每次询问位置[L,R]中abs(a[i]-p)第k小的值 n,m<=1e5,a[i]<=1e6,p<=1e6,k<=169 思 ...
- [CSP-S模拟测试]:Travel(贪心+构造)
题目描述 给定一个长度为$n$的格子序列$x_1,x_2,...,x_n$.每一次$Lyra$可以选择向左跳到任意一个还没到过的位置,也可以向右跳到任意一个还没到过的位置.如果现在$Lyra$在格子$ ...