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,然后插入新的一个点之后,查这个节点的前 ...
随机推荐
- 微信小程序点击保存图片到相册
wxml部分的代码 <view class="footer-r" bindtap="save"> <image src="../ ...
- ElasticSearch 入门介绍
tags: 第三方 lucene [toc] 1. what Elastic Search(ES)是什么 全文检索和lucene 全文检索 优点:高效,准确,分词全文检索允许用户输入一些关键字,从数据 ...
- tf.clip_by_global_norm
首先明白这个事干嘛的,在我们做求导的时候,会遇到一种情况,求导函数突然变得特别陡峭,是不是意味着下一步的进行会远远高于正常值,这个函数的意义在于,在突然变得陡峭的求导函数中,加上一些判定,如果过于陡峭 ...
- FMC228- 四路16位1.2Gsps DA FMC子卡模块
FMC228- 四路16位1.2Gsps DA FMC子卡模块 一.概述 FMC连接器是一种高速多pin的互连器件,广泛应用于板卡对接的设备中,特别是在xilinx公司的所有开发板中 ...
- Linux性能优化从入门到实战:17 网络篇:网络基础
网络模型 为了解决网络互联中异构设备的兼容性问题,并解耦复杂的网络包处理流程,国际标准化组织制定了开放式系统互联通信参考模型(Open System Interconnection Reference ...
- Linux命令行工具之vmstat命令
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11484608.html vmstat是一款指定采样周期和次数的功能性监测工具,可以使用它监控进程上下文 ...
- drf 搜索功能
from django_filters.rest_framework import DjangoFilterBackend from rest_framework import viewsets fr ...
- idhttp.get返回403错误解决办法
在GET之前,先指定UserAgent参数IdHTTP1.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Ma ...
- linux常用基本命令 grep awk 待优化
查看centos操作系统版本:cat /etc/centos-release 切换到当前用户主目录:cd 或者cd ~ 创建文件夹/a/b/c:mkdir -pv /a/b/c.如果/a/b/c的父目 ...
- 网页用html还是php
首先,不管是html还是php,虽然这是两种不同的语言,但是都可以编写网页.不同的是,使用html编写网页是纯静态的网页,无法是运行在本地的,且无法和用户进行交互:而使用php编写的网页则是动态的,运 ...