bzoj1588: [HNOI2002]营业额统计 treap

原来treap这么简单。。。比splay简单多了。。。。

#include<bits/stdc++.h>
#define REP(i,a,b) for(int i=a;i<=b;i++)
#define MS0(a) memset(a,0,sizeof(a))

using namespace std;

typedef long long ll;
const int maxn=1000100;
const int INF=1e9+10;

int n,a;
struct Node
{
    Node *ch[2];
    int r,v;
    Node()
    {
        ch[0]=ch[1]=NULL;
        r=rand();v=0;
    }
};Node *rt;

void Free(Node *o)
{
    if(o==NULL) return;
    Free(o->ch[0]);
    Free(o->ch[1]);
    delete o;
}

void rot(Node* &o,int d)
{
    Node* k=o->ch[d^1];
    o->ch[d^1]=k->ch[d];
    k->ch[d]=o;
    o=k;
}

void Insert(Node* &o,int x)
{
    if(o==NULL){
        o=new Node();
        o->v=x;
        return;
    }
    if(o->v==x) return;
    int d=x<o->v?0:1;
    Insert(o->ch[d],x);
    if(o->ch[d]->r>o->r) rot(o,d^1);
}

int Find(Node* &o,int x)
{
    if(o==NULL) return 0;
    if(o->v==x) return 1;
    if(x<o->v) return Find(o->ch[0],x);
    else return Find(o->ch[1],x);
}

int getpre(Node* &o,int x)
{
    if(o==NULL) return -INF;
    if(x<=o->v) return getpre(o->ch[0],x);
    else return max(o->v,getpre(o->ch[1],x));
}

int getnext(Node* &o,int x)
{
    if(o==NULL) return INF;
    if(x>=o->v) return getnext(o->ch[1],x);
    else return min(o->v,getnext(o->ch[0],x));
}

int main()
{
    //freopen("in.txt","r",stdin);
    while(cin>>n){
        Free(rt);
        int ans=0;
        REP(i,1,n){
            if(scanf("%d",&a)==EOF) a=0;
            if(i==1) ans+=a;
            else{
                int b=Find(rt,a);
                if(b==1) ;
                else{
                    int x=getpre(rt,a),y=getnext(rt,a);
                    ans+=min(a-x,y-a);
                }
            }
            Insert(rt,a);
        }
        cout<<ans<<endl;
        Free(rt);
    }
    return 0;
}

时间: 2024-12-23 10:49:52

bzoj1588: [HNOI2002]营业额统计 treap的相关文章

[BZOJ1588][HNOI2002]营业额统计 无旋Treap

[HNOI2002]营业额统计 时间限制: 5 Sec  内存限制: 162 MB 题目描述 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是一项相当复杂的工作.由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况出现了问题.经济管理学上定

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

1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 13902  Solved: 5225[Submit][Status][Discuss] Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是一项相当复杂的工作.由于节假日,大减价或者是其

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

1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 14151  Solved: 5366[Submit][Status][Discuss] Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是一项相当复杂的工作.由于节假日,大减价或者是其

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

[HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 4128  Solved: 1305 Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是一项相当复杂的工作.由于节假日,大减价或者是其他情况的时候,营业 额会出现一定的波动,当然一定的波动是能够接受

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

1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 16189  Solved: 6482 [Submit][Status][Discuss] Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是一项相当复杂的工作.由于节假日,大减价或者

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

1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 17555  Solved: 7179[Submit][Status][Discuss] Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是一项相当复杂的工作.由于节假日,大减价或者是其

BZOJ1588: [HNOI2002]营业额统计(正解:平衡树,我的歪解:暴力)

Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是一项相当复杂的工作.由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况出现了问题.经济管理学上定义了一种最小波动值来衡量这种情况: 该天的最小波动值 当最小波动值越大

BZOJ1588 [HNOI2002] 营业额统计

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1588 又是一道Treap模版题……总做模版题不好…… 另外牢记:BZOJ上用srand(time(0))会RE! 1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cstring> 5 #include <ctime> 6 #defin

bzoj1588 [HNOI2002]营业额统计 (平衡树)

平衡树裸题 只需要求前驱后驱 treap写法 const mm=1<<30; maxnumber=500000; maxn=500000; var left,right,fix,key:array[0..maxn]of longint; t,n,ans,i,j,k,l,tot:longint; function min(x,y:longint):longint; begin if x<y then exit(x); exit(y); end; function max(x,y:longi