HNOI 2002 营业额统计
评测地点: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 营业额统计相关推荐
- [BZOJ 1588][HNOI 2002] 营业额统计
这果然是在那个没有STL的年代出的题 1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MB Submit: 16648 Solv ...
- [BZOJ 1588] [HNOI 2002] 营业额统计
1588: [HNOI2002]营业额统计 Time Limit: 5 SecMemory Limit: 162 MB Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任 ...
- HNOI 2002 营业额统计(Splay树)
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MB Submit: 6923 Solved: 2286 [Submit][St ...
- CJOJ 1308 【HNOI 2002 】营业额统计 / CodeVS 1296 营业额统计
CJOJ 1308 [HNOI 2002 ]营业额统计 / CodeVS 1296 营业额统计 Description Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并 ...
- 【Treap】bzoj1588-HNOI2002营业额统计
一.题目 Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司 ...
- bzoj1588[HNOI2002]营业额统计
bzoj1588[HNOI2002]营业额统计 题意: n天,每天得到一个值,要求输出每一天和这天得到的值相差最小的之前天得到的值与这个值的差的和.n不知道,不过O(nlog2n)可写. 题解: 说是 ...
- 【链表】BZOJ1588: [HNOI2002]营业额统计
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MB Submit: 17555 Solved: 7179 [Submit][S ...
- BZOJ 1588: [HNOI2002]营业额统计
Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每 ...
- bzoj1588营业额统计
Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每 ...
最新文章
- 关于github failed to push some refs
- uva 11069 A Graph Problem
- 【MyBatis】MyBatis初体验
- python request url编码_Python 爬虫 (requests) 发送中文编码的 HTTP POST 请求
- asp.net使用My97 Date Picker时设置默认起始时间为n年之前的今天
- C#实现中国天气网XML接口测试
- tomcat安全认证
- Apache+Tomcat动静分离
- 游戏物体复用:对象池(以Unity3D为例)
- C++_实现一个简单的智能指针shared_ptr
- 【图像隐写】基于matlab GUI DCT数字水印嵌入+提取【含Matlab源码 1671期】
- php ora01017,使用dblink出现ORA-01017
- 【泛微Ecology9.0】安装\启用非标功能
- GL_TEXTURE_WRAP系列参数的取值
- idea 安装本地插件
- 网易云热评 《十年》
- 中值定理5-泰勒中值定理
- 一个爬取图片的app
- cdh6.1,cdh6.2 hue sqoop组件提交异常
- Python中一些与word模板文件操作相关的库