评测地点:http://www.lydsy.com/JudgeOnline/problem.php?id=1588

简单题,splay

题意:

  按顺序给出一些数,找出距离当前数最近的数的差,将这些差求和即可。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <cmath>
#include <utility>
#include <vector>
#include <queue>
#include <map>
#include <set>
#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)>(y)?(y):(x))
#define INF 0x3f3f3f3f
#define MAXN 100005using namespace std;int cnt=1, rt=0;struct Tree
{int key, size, fa, son[2];void set(int _key, int _size, int _fa){key=_key;size=_size;fa=_fa;son[0]=son[1]=0;}
}T[MAXN];inline void PushUp(int x)
{T[x].size=T[T[x].son[0]].size+T[T[x].son[1]].size+1;
}inline void Rotate(int x, int p) //0左旋 1右旋
{int y=T[x].fa;T[y].son[!p]=T[x].son[p];T[T[x].son[p]].fa=y;T[x].fa=T[y].fa;if(T[x].fa)T[T[x].fa].son[T[T[x].fa].son[1] == y]=x;T[x].son[p]=y;T[y].fa=x;PushUp(y);PushUp(x);
}void Splay(int x, int To) //将x节点插入到To的子节点中
{while(T[x].fa != To){if(T[T[x].fa].fa == To)Rotate(x, T[T[x].fa].son[0] == x);else{int y=T[x].fa, z=T[y].fa;int p=(T[z].son[0] == y);if(T[y].son[p] == x)Rotate(x, !p), Rotate(x, p); //之字旋elseRotate(y, p), Rotate(x, p);    //一字旋
        }}if(To == 0) rt=x;
}int find(int key) //返回值为key的节点 若无返回0 若有将其转移到根处
{int x=rt;while(x && T[x].key != key)x=T[x].son[key > T[x].key];if(x) Splay(x, 0);return x;
}int prev() //返回比根值小的最大值 若无返回0 若有将其转移到根处
{int x=T[rt].son[0];if(!x) return 0;while(T[x].son[1])x=T[x].son[1];//Splay(x, 0);return x;
}int succ() //返回比根值大的最小值 若无返回0 若有将其转移到根处
{int x=T[rt].son[1];if(!x) return 0;while(T[x].son[0])x=T[x].son[0];//Splay(x, 0);return x;
}void Insert(int key) //插入key 并且将该节点转移到根处
{if(!rt)T[rt = cnt++].set(key, 1, 0);else{int x=rt, y=0;while(x){y=x;x=T[x].son[key > T[x].key];}T[x = cnt++].set(key, 1, y);T[y].son[key > T[y].key]=x;Splay(x, 0);}
}int getclose(int key)
{if(!rt) return 0;int x=rt, ret=2000000000;while(x){ret=min(ret, abs(T[x].key-key));x=T[x].son[key > T[x].key];}return ret;
}int main ()
{int n, x, ans, mi;scanf("%d%d", &n, &x);Insert(x);ans=x;while(--n){if(scanf("%d", &x)==EOF) x=0;ans+=getclose(x);Insert(x);}printf("%d\n", ans);return 0;
}

View Code

转载于:https://www.cnblogs.com/Mathics/p/3971556.html

HNOI 2002 营业额统计相关推荐

  1. [BZOJ 1588][HNOI 2002] 营业额统计

    这果然是在那个没有STL的年代出的题 1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 16648  Solv ...

  2. [BZOJ 1588] [HNOI 2002] 营业额统计

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

  3. HNOI 2002 营业额统计(Splay树)

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 6923  Solved: 2286 [Submit][St ...

  4. CJOJ 1308 【HNOI 2002 】营业额统计 / CodeVS 1296 营业额统计

    CJOJ 1308 [HNOI 2002 ]营业额统计 / CodeVS 1296 营业额统计 Description Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并 ...

  5. 【Treap】bzoj1588-HNOI2002营业额统计

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

  6. bzoj1588[HNOI2002]营业额统计

    bzoj1588[HNOI2002]营业额统计 题意: n天,每天得到一个值,要求输出每一天和这天得到的值相差最小的之前天得到的值与这个值的差的和.n不知道,不过O(nlog2n)可写. 题解: 说是 ...

  7. 【链表】BZOJ1588: [HNOI2002]营业额统计

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

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

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

  9. bzoj1588营业额统计

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

最新文章

  1. 关于github failed to push some refs
  2. uva 11069 A Graph Problem
  3. 【MyBatis】MyBatis初体验
  4. python request url编码_Python 爬虫 (requests) 发送中文编码的 HTTP POST 请求
  5. asp.net使用My97 Date Picker时设置默认起始时间为n年之前的今天
  6. C#实现中国天气网XML接口测试
  7. tomcat安全认证
  8. Apache+Tomcat动静分离
  9. 游戏物体复用:对象池(以Unity3D为例)
  10. C++_实现一个简单的智能指针shared_ptr
  11. 【图像隐写】基于matlab GUI DCT数字水印嵌入+提取【含Matlab源码 1671期】
  12. php ora01017,使用dblink出现ORA-01017
  13. 【泛微Ecology9.0】安装\启用非标功能
  14. GL_TEXTURE_WRAP系列参数的取值
  15. idea 安装本地插件
  16. 网易云热评 《十年》
  17. 中值定理5-泰勒中值定理
  18. 一个爬取图片的app
  19. cdh6.1,cdh6.2 hue sqoop组件提交异常
  20. Python中一些与word模板文件操作相关的库

热门文章

  1. Python 实现队列
  2. yii 提交表单报400错误,提示 “您提交的数据无法验证”,问题处理。
  3. 897-递增顺序查找树
  4. iOS逆向之自动化重签名
  5. 达索系统成立“大土木工程达索系统BIM技术推进联盟”深化应用、共享经验
  6. 广东联通携手英特尔:发布业内首款定制物联网模块产品
  7. Android-Splash
  8. Oracle Tuning ( instance 级别 ) 01
  9. UCHome风格模版 框架核心代码提取
  10. 计算机任务管理器恢复默认,关于任务管理器的一个问题??