懒得复制,戳我戳我

Solution:

  • \(Splay\)板子题,注意可以选择相等大小

Code:

//It is coded by Ning_Mew on 4.10
#include<bits/stdc++.h>
#define ls(x) node[x].ch[0]
#define rs(x) node[x].ch[1]
#define fa(x) node[x].fa
#define root node[0].ch[1]
using namespace std; const int maxn=32800,INF=1e9+7; int n,tot=0,ans=0;
struct Node{
int fa,ch[2],val,cnt,size;
}node[maxn]; void update(int x){node[x].size=node[ls(x)].size+node[rs(x)].size+node[x].cnt;}
void connect(int x,int fa,int how){node[x].fa=fa;node[fa].ch[how]=x;}
int ident(int x){return x==node[fa(x)].ch[0]?0:1;}
void rorate(int x){
int Y=fa(x),R=fa(Y);int Yson=ident(x),Rson=ident(Y);
connect(node[x].ch[Yson^1],Y,Yson);
connect(Y,x,Yson^1);
connect(x,R,Rson);
update(Y);update(x);return;
}
void Splay(int x,int goal){
int to=fa(goal);
while(fa(x)!=to){
if(fa(fa(x))==to)rorate(x);
else if(ident(x)==ident(fa(x)))rorate(fa(x)),rorate(x);
else rorate(x),rorate(x);
}
}
int newnode(int x,int fa){
node[++tot].val=x;node[tot].size=node[tot].cnt=1;node[tot].fa=fa;return tot;
}
void ins(int x){
int now=root;
if(!now){newnode(x,0);root=tot;return;}
else{
while(1){
node[now].size++;
if(node[now].val==x){node[now].cnt++;Splay(now,root);return;}
int nxt=x<node[now].val?0:1;
if(!node[now].ch[nxt]){
int p=newnode(x,now);
node[now].ch[nxt]=p;Splay(p,root);return;
}
now=node[now].ch[nxt];
}
}
}
int lower(int x){
int now=root,ans=-INF;
while(now){
if(node[now].val<x)ans=max(ans,node[now].val);
if(node[now].val==x&&node[now].cnt!=1)ans=max(ans,node[now].val);
int nxt=x<=node[now].val?0:1;
now=node[now].ch[nxt];
}return ans;
}
int upper(int x){
int now=root,ans=INF;
while(now){
if(node[now].val>x)ans=min(ans,node[now].val);
if(node[now].val==x&&node[now].cnt!=1)ans=min(ans,node[now].val);
int nxt=x<node[now].val?0:1;
now=node[now].ch[nxt];
}return ans;
}
int main(){
scanf("%d",&n);
int x;
for(int i=1;i<=n;i++){
scanf("%d",&x); ins(x);
//cout<<"ins Finished"<<endl;
if(i==1)ans=x;
else {
int up=upper(x),low=lower(x),box=INF;
if(up!=INF)box=min(box,abs(up-x));
if(low!=-INF)box=min(box,abs(low-x));
//cout<<up<<' '<<low<<' '<<box<<endl;
ans+=box;
}
//cout<<"ans changed"<<endl;
}
printf("%d\n",ans);
return 0;
}

【题解】 [HNOI2002]营业额统计 (Splay)的更多相关文章

  1. bzoj1588: [HNOI2002]营业额统计(splay)

    1588: [HNOI2002]营业额统计 题目:传送门 题解: 复习splay所以来刷个水... 题目描述不是特别清楚:应该是找第i天以前一个最小的营业额和第i天做差的最小值作为第i天的最小波动值 ...

  2. BZOJ1588 HNOI2002 营业额统计 [Splay入门题]

    [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 4128  Solved: 1305 Description 营业额统计 ...

  3. 1588: [HNOI2002]营业额统计 (splay tree)

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 5783  Solved: 1859[Submit][Stat ...

  4. [HNOI2002]营业额统计 Splay tree入门题

    题目连接:http://www.lydsy.com/JudgeOnline/problem.php?id=1588 1588: [HNOI2002]营业额统计 Time Limit: 5 Sec   ...

  5. BZOJ1588 [HNOI2002]营业额统计 splay模板

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 16189  Solved: 6482 [Submit][S ...

  6. Bzoj 1588: [HNOI2002]营业额统计(splay)

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

  7. 洛谷P2234 [HNOI2002] 营业额统计 [splay]

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

  8. HNOI2002 营业额统计 [Splay]

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

  9. [bzoj1588][HNOI2002]营业额统计——splay

    题目大意 你被要求编写一个数据结构,支援以下操作,操作在线. 插入一个元素 查询一个元素与之前插入元素的最小差值. 题解 一道模板题.我是写了一个pre和succ函数水过的.1A,比较高兴. 代码 # ...

  10. bzoj1588: [HNOI2002]营业额统计 splay瞎写

    最近各种瞎写数论题,感觉需要回顾一下数据结构 写一发splay冷静一下(手速过慢,以后要多练练) 用splay是最直接的方法,但我感觉离散一波应该可以做出来(没仔细想过) 现在没有很追求代码优美,感觉 ...

随机推荐

  1. redis的使用,相比memcached

    redis支持数据持久化,不像memcached断电或者重启就丢失数据了. 支持持久化主要有两种方式,在redis.conf配置文件里配置. 1. 使用.rdb格式存储,配置save参数(save N ...

  2. 03-Python执行方式和Pycharm设置

    https://www.python.org/ 单词列表 * error 错误 * name 名字 * defined 已经定义 * syntax 语法 * invalid 无效 * Indentat ...

  3. # 20155319 Exp3 免杀原理与实践

    20155319 Exp3 免杀原理与实践 基础问题 (1)杀软是如何检测出恶意代码的? 基于特征码的检测 启发式的恶意软件检测 基于行为的恶意软件检测 (2)免杀是做什么? 免杀,从字面进行理解,避 ...

  4. 预定义的类型“System.Object”未定义或未导入

    打开一个以前的程序 ,发现报这个错误.检查了程序,发现程序的引用 System 不见了 ,尝试 引用失败.. 查了有人说重新建立 Sln文件有用.. 一头雾水,随后 尝试操作 ,程序有用了 具体步骤: ...

  5. xml中该使用属性还是元素

    XML 中没有规定哪些必须放在属性或者子元素,因此使用哪种方式都是可以实现的.这取决于个人的经验和喜好.在可以使用元素也可以使用属性的两选一的情况下,个人更倾向于使用子元素.主要理由如下: 1. 属性 ...

  6. Wannafly挑战赛26-F-msc的棋盘[最小割转化dp]

    题意 一个大小为 \(n*m\) 的棋盘,知道每一列放了多少棋子,求有多少摆放方案满足要求. \(n,m\leq 50\) . 分析 如果是求是否有方案的话可以考虑网络流,行列连边,列容量为 \(b_ ...

  7. Please restart this script from an administrative PowerShell

    问题 在上一篇<MSBUILD : error MSB3428: 未能加载 Visual C++ 组件"VCBuild.exe">,安装时失败了,提示: 解决办法 1. ...

  8. 在Windows商店应用中使用浅色主题

    在开发商店应用时会遇到这样的情况,设计师给我们的设计是浅色背景/深色文本,而商店应用默认是深色背景/浅色文本.那我们需要在每个页面去显式声明背景色和前景色吗,这显然是不理想的.这时就需要设置应用的主题 ...

  9. 树形DP ---- Codeforces Global Round 2 F. Niyaz and Small Degrees引发的一场血案

    Aspirations:没有结果,没有成绩,acm是否有意义?它最大的意义就是让我培养快速理解和应用一个个未知知识点的能力. ————————————————————————————————————— ...

  10. 强化学习算法DQN

    1 DQN的引入 由于q_learning算法是一直更新一张q_table,在场景复杂的情况下,q_table就会大到内存处理的极限,而且在当时深度学习的火热,有人就会想到能不能将从深度学习中借鉴方法 ...