题面

传送门

分析

语文题,主要是如何理解最小波动值

设当前天的营业额为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)的更多相关文章

  1. BZOJ 1588: Treap 模板

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 12171  Solved: 4352 Description ...

  2. BZOJ 1588: [HNOI2002]营业额统计 双向链表

    BZOJ 1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 512 MBSubmit: 9619  Solved: 3287 题目连接 ht ...

  3. BZOJ 1588: [HNOI2002]营业额统计 双向链表 / splay / treap

    1588: [HNOI2002]营业额统计 Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger ...

  4. bzoj 1588: [HNOI2002]营业额统计 treap

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 13902  Solved: 5225[Submit][Sta ...

  5. 2018.07.06 BZOJ 1588: HNOI2002营业额统计(非旋treap)

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MB Description 营业额统计 Tiger最近被公司升任为营业部经理,他上 ...

  6. 【BZOJ 1588】[HNOI2002] 营业额统计(Treap)

    Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每 ...

  7. BZOJ 1588 HNOI2002 营业额统计 裸Treap

    题目大意:...题目描写叙述不全看这里好了 给定一个序列 对于每一个元素我们定义该数的最小波动值为这个数与前面全部数的差中的最小值(第一个数的最小波动值为第一个数本身) 求最小波动值之和 找近期的数仅 ...

  8. BZOJ 1588: [HNOI2002]营业额统计

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 14396  Solved: 5521[Submit][Sta ...

  9. BZOJ 1588:营业额统计(Splay)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1588 题意:中文题意. 思路:每一个点每一个点插入Splay,然后插入新的一个点之后,查这个节点的前 ...

随机推荐

  1. 基本SQL查询语句

    使用Emp表和Dept表完成下列练习 Emp员工表 empno ename job Mgr Hiredate Sal Comm Deptno 员工号 员工姓名 工作 上级编号 受雇日期 薪金 佣金 部 ...

  2. linux命令之 repeat 重复执行命令

    $ vim ~/.bashrc function repeat() { number=$1 shift echo $@ for n in $(seq $number); do $@ done } $ ...

  3. 安装kali linux 后出现文字乱码问题

    在安装kali时我选择中文安装,结果安装完成后出现文字乱码现象 在经过上网查询后,采用了CSDN博客站中的 stubbornness1219 这位博主的解决方案成功将问题解决. 解决方案:终端下执行s ...

  4. 狼人杀校园升级版:学霸大战学渣 Who is the king of examination!

    之前在微博上看到一个很老的段子 写道 天黑请闭眼.学霸请睁眼,学霸请答题,好的学霸请闭眼:学渣请睁眼,学渣请坐弊,好的学渣请闭眼:监考老师请睁眼,监考老师请确定坐弊考生,监考老师请统一意见,好的监考老 ...

  5. Map和Set的联系

    Java中的集合 Java中的集合包括三大类,它们是Set.List和Map,它们都处于java.util包中,Set.List和Map都是接口,它们有各自的实现类.Set的实现类主要有HashSet ...

  6. 【leetcode】1039. Minimum Score Triangulation of Polygon

    题目如下: Given N, consider a convex N-sided polygon with vertices labelled A[0], A[i], ..., A[N-1] in c ...

  7. 对webpack的初步研究3

    Output配置output配置选项告诉webpack如何将编译后的文件写入磁盘.请注意,虽然可以有多个entry点,但只output指定了一个配置. A filename to use for th ...

  8. tensorflow函数介绍 (5)

    1.tf.ConfigProto tf.ConfigProto一般用在创建session的时候,用来对session进行参数配置: with tf.Session(config=tf.ConfigPr ...

  9. DGA域名检测

    一.DGA域名原理 僵尸网络(Botnet):互联网上在蠕虫.木马.后门工具等,传统恶意代码形态的基础上发展.融合而产生的一种新型攻击方法. DNS(Domain Name System) :基于 U ...

  10. 第六周作业—N42-虚怀若谷

    一.自建yum仓库,分别为网络源和本地源 [root@centos7 ~]# cd /etc/yum.repos.d/ [root@centos7 yum.repos.d]# mkdir bak #建 ...