这个也是板子题吧,很水,求前驱后继即可
/*
插入,求前驱和后继
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define MAXN 1000000
int ch[MAXN][],f[MAXN],size[MAXN],cnt[MAXN],key[MAXN];
int sz,root;
inline void clear(int x){ch[x][]=ch[x][]=f[x]=size[x]=cnt[x]=key[x]=;}
inline bool get(int x){return ch[f[x]][]==x;}//判断x是左儿子还是右儿子
inline void update(int x){
if(x){
size[x]=cnt[x];
if(ch[x][]) size[x]+=size[ch[x][]];
if(ch[x][]) size[x]+=size[ch[x][]];
}
}
inline void rotate(int x){
int old=f[x],oldf=f[old],whichx=get(x);
ch[old][whichx]=ch[x][whichx^];
f[ch[old][whichx]]=old; ch[x][whichx^]=old;f[old]=x; f[x]=oldf;
if(oldf) ch[oldf][ch[oldf][]==old]=x;
update(old);update(x);
}
inline void splay(int x){
for(int fa;fa=f[x];rotate(x))
if(f[fa]) rotate((get(x)==get(fa))?fa:x);
root=x;
}
inline void insert(int x){
if(root==){root=++sz;ch[sz][]=ch[sz][]=f[sz]=;size[sz]=cnt[sz]=;key[sz]=x;return;}
int now=root,fa=;
while(){
if(x==key[now]){cnt[now]++;update(now);update(fa);splay(now);break;}
fa=now;now=ch[now][key[now]<x];
if(now==){
sz++;ch[sz][]=ch[sz][]=;
f[sz]=fa;size[sz]=cnt[sz]=;
ch[fa][key[fa]<x]=sz;
key[sz]=x;//新建节点
update(fa);splay(sz);break;
}
}
}
inline int find(int x){//寻找x所在位置
int now=root,ans=;
while(){
if(x<key[now]) now=ch[now][];
else {
ans+=(ch[now][]?size[ch[now][]]:);
if(x==key[now]){splay(now);return ans+;}
ans+=cnt[now];
now=ch[now][];
}
}
}
inline int findx(int x){//找第x名的值
int now=root;
while(){
if(ch[now][] && x<=size[ch[now][]]) now=ch[now][];
else {
int temp=(ch[now][]?size[ch[now][]]:)+cnt[now];
if(x<=temp) return key[now];
x-=temp;now=ch[now][];
}
}
}
inline int pre(){int now=ch[root][];while(ch[now][]) now=ch[now][];return now;}
inline int next(){int now=ch[root][];while(ch[now][]) now=ch[now][];return now;}
int main(){
int n,a;
while(scanf("%d",&n)==){
int ans=;
for(int i=;i<n;i++){
scanf("%d",&a);
if(i==) {insert(a);ans+=a;}
else {
int tmp=;
insert(a);
if(cnt[root]>) continue;
if(ch[root][])tmp=min(tmp,key[next()]-a);
if(ch[root][])tmp=min(tmp,a-key[pre()]);
ans+=tmp;
}
}
printf("%d\n",ans);
}
return ;
}

bzoj营业额统计的更多相关文章

  1. SET || BZOJ 1588: [HNOI2002]营业额统计 || Luogu P2234 [HNOI2002]营业额统计

    题面:P2234 [HNOI2002]营业额统计 题解:随便写写 注意:cmath中abs函数返回的是一个浮点数,在bzoj上会ce 代码: #include<cstdio> #inclu ...

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

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

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

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

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

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

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

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

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

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

  7. BZOJ 1588 营业额统计

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

  8. 数据结构:(平衡树,链表)BZOJ 1588[HNOI2002]营业额统计

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

  9. (HYSBZ)BZOJ 1588 营业额统计

    营业额统计 Time Limit: 5000MS   Memory Limit: 165888KB   64bit IO Format: %lld & %llu Description 营业额 ...

随机推荐

  1. IP基本原理

    IP基本原理 一.IP基本原理 IP是网络层协议,也是当今应用最广泛的网络协议之一 IP协议规定了数据的封装方式,网络节点的标识方法,用于网络上数据的端到端的传递. 1.IP及其相关协议 2.IP的主 ...

  2. JAVA锁的优化和膨胀过程

    转自:https://www.cnblogs.com/dsj2016/p/5714921.html https://cloud.tencent.com/developer/article/103675 ...

  3. springboot系列之-logging

    配置文件以application.yml为例说明: Spring Boot默认的日志组件为Logback. 一. 日志配置参数: logging: file: # 日志文件,绝对路径或相对路径 pat ...

  4. spyder里的"查找文件里的特定字符串"非常方便

    spyder里的"查找文件里的特定字符串"非常方便 快捷键是: ^+shift+F 使用方法: 输入被查找的字符串: 比如: .rcParam, 注意大小写敏感的(默认设置) 回车 ...

  5. JAVA通过继承线性表来实现有序表

    1,对于线性表而言,里面的元素是无序的,可以随意地将新元素增加到线性表中而不需要考虑该元素在线性表中的位置.但是,对于有序表而言,其中的元素是按照某种方式进行排序的,因此在有序表中插入元素时,需要按照 ...

  6. VUE2.0 饿了吗视频学习笔记(三):VUE2.0取消了v-link

    https://gitee.com/1981633/vue_study.git 源码下载地址,随笔记动态更新中 写法如下 <div class="tab-item"> ...

  7. SmartUpload文件上传组件的使用教程

    在项目中使用SmartUpload组件可以进行文件的上传和下载操作 使用步骤 1.导入jar包,进行build path操作 2.编写文件上传页面,代码如下 <form action=" ...

  8. sql工具和手工注入总结

    普通注入: 数字注入 字符注入 base64注入:和常规的方法没有说明区别,主要是解码然后编码: 如果普通注入不行,尝试大小写绕过,编码等绕过: 如果不行尝试盲注: POST注入 0x00 常用的 注 ...

  9. listcontrolc插入列时,出现断言错误

    原因:窗口还未创建,就对listcontrol进行了操作 解决方案:在初始化函数中 添加CDialogEx::OnInitDialog();

  10. js 窗口滚动到一定高度时加载数据

    <script type="text/javascript"> //当窗口滚动到一定高度时 某块页面开始加载数据 window.onload = function() ...