对于当天的营业额,你要找到之前的数和他差的绝对值最小的和。由于这个是不断在插入的,所以用伸展树来维护。

http://www.lydsy.com/JudgeOnline/problem.php?id=1588

照着kuangbin大牛的代码敲下来的。

#include<map>
#include<set>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define INF 99999999
#define ll __int64
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
const int MAXN = ;
int pre[MAXN],key[MAXN],ch[MAXN][],root,tot;
//父亲结点 键值 左右子树 根节点 节点数量
int n;
void Newnode(int &rt,int pa,int k)
{
rt = ++tot;
pre[rt] = pa;
key[rt] = k;
ch[rt][] = ch[rt][] = ;//空
} void Rotate(int x,int kind)
{
int y = pre[x];
ch[y][!kind] = ch[x][kind];
pre[ch[x][kind]] = y;
if(pre[y]){
ch[pre[y]][ch[pre[y]][]==y] = x;
}
pre[x] = pre[y];
ch[x][kind] = y;
pre[y] = x;
} //将结点rt 调整到goal下面
void splay(int rt,int goal)
{
while(pre[rt] != goal)
{
if(pre[pre[rt]] == goal)
Rotate(rt,ch[pre[rt]][]==rt);
else {
int y = pre[rt];
int kind = (ch[pre[y]][]==y);
if(ch[y][kind] == rt){//rt 和 pre[rt]不在同一方向上
Rotate(rt,!kind); //kind=1时,说明rt在y的右边 而y在pre[y]的左边
Rotate(rt,kind);
}
else {
Rotate(y,kind);
Rotate(rt,kind);
}
}
}
if(goal == )
root = rt;
} int Insert(int k)
{
int rt = root;
while(ch[rt][key[rt]<k]){//如果key[r]<k,表明当前k在右边,不然去左边
if(key[rt] == k){
splay(rt,);
return ;
}
rt = ch[rt][key[rt]<k];
}
Newnode(ch[rt][key[rt]<k],rt,k);
splay(ch[rt][key[rt]<k],);
return ;
} int get_pre(int rt)
{
int tmp = ch[rt][];
if(tmp == )
return INF;
while(ch[tmp][])
{
tmp = ch[tmp][];
}
return key[rt] - key[tmp];
} int get_next(int rt)
{
int tmp = ch[rt][];
if(tmp == )
return INF;
while(ch[tmp][])
{
tmp = ch[tmp][];
}
return key[tmp] - key[rt];
}
int main()
{
int i,j;
while(~scanf("%d",&n))
{
root = tot = ;
int ans = ;
for(i=; i<=n; i++){
int num;
if(scanf("%d",&num)==EOF)num = ;
if(i == ){
ans += num;
Newnode(root,,num);
continue;
}
if(Insert(num) == )
continue;
int a = get_pre(root);
int b = get_next(root);
//cout<<a<<" "<<b<<endl;
ans += min(a,b);
}
printf("%d\n",ans);
}
}

HNOI2002的更多相关文章

  1. BZOJ1588: [HNOI2002]营业额统计[BST]

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

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

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

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

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

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

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

  5. [BZOJ1220][POJ1091][HNOI2002]跳蚤

    [BZOJ1220][POJ1091][HNOI2002]跳蚤 试题描述 Z城市居住着很多只跳蚤.在Z城市周六生活频道有一个娱乐节目.一只跳蚤将被请上一个高空钢丝的正中央.钢丝很长,可以看作是无限长. ...

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

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

  7. BZOJ_1588_&_Codevs_1296_[HNOI2002]_营业额统计(平衡树/set)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1588 给出每一天的营业值,求出之前的天当中与它相差最小的营业值与它的差的绝对值(第一天的差值为 ...

  8. bzoj 1223: [HNOI2002]Kathy函数 数位DP 高精度

    1223: [HNOI2002]Kathy函数 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 207  Solved: 90[Submit][Stat ...

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

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

  10. bzoj1588 [HNOI2002]营业额统计(Treap)

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

随机推荐

  1. 矩阵乘法 codevs 1287 矩阵乘法

    1287 矩阵乘法  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold       题目描述 Description 小明最近在为线性代数而头疼,线性代数确实很抽象 ...

  2. 微博API使用

    新浪微博的API开放平台: http://open.weibo.com/wiki/%E5%BE%AE%E5%8D%9AAPI IOS和Android都有SDK可以下载,ios的地址: https:// ...

  3. 这一路走来,冷暖自知 (附算法demos)

    最近半年多,除了“一键修图”算法之外我还做了其他什么算法? 1.实时单图HDR算法(颜色矫正,智能曝光) 2.多图曝光融合HDR算法(最高支持八百万像素左右) 3.模拟热能探测算法 4.防伪探测算法 ...

  4. POJ 1442 Black Box -优先队列

    优先队列..刚开始用蠢办法,经过一个vector容器中转,这么一来一回这么多趟,肯定超时啊. 超时代码如下: #include <iostream> #include <cstdio ...

  5. RMQ之ST算法模板

    #include<stdio.h> #include<string.h> #include<iostream> using namespace std; ; ],M ...

  6. AC日记——手写堆ac合并果子(傻子)

    今天整理最近的考试题 发现一个东西叫做优先队列 priority_queue(说白了就是大根堆) 但是 我对堆的了解还是很少的 所以 我决定手写一个堆 于是我写了一个简单的堆 手写的堆说白了就是个二叉 ...

  7. [转]比较Jmeter、Grinder和JAVA多线程本身压力测试所带来的性能开销

    1. 测试环境 jmeter版本 :jmeter 2.4 grinder的版本 : Grinder 3 JAVA的版本:JDK 1.6 2. 测试代码 Jmeter测试代码 public class  ...

  8. java 12-3 StringBuffer的添加和删除功能

    1. StringBuffer的添加功能: public StringBuffer append(String str):可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身 public ...

  9. ES配置文件参考与参数详解

    cluster.name: data-cluster node.name: "data-es-05" #node.data: false # Indexing & Cach ...

  10. U3D assetbundle加载

    using UnityEngine; using System.Collections; public class testLoadFromAB : MonoBehaviour { IEnumerat ...