zoukankan      html  css  js  c++  java
  • 营业额统计(bzoj1588)

    Description

    营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况出现了问题。经济管理学上定义了一种最小波动值来衡量这种情况: 该天的最小波动值 当最小波动值越大时,就说明营业情况越不稳定。 而分析整个公司的从成立到现在营业情况是否稳定,只需要把每一天的最小波动值加起来就可以了。你的任务就是编写一个程序帮助Tiger来计算这一个值。 第一天的最小波动值为第一天的营业额。  输入输出要求

    Input

    第一行为正整数 ,表示该公司从成立一直到现在的天数,接下来的n行每行有一个整数(有可能有负数) ,表示第i天公司的营业额。

    Output

    输出文件仅有一个正整数,即Sigma(每天最小的波动值) 。结果小于2^31 。

    Sample Input

    6
    5
    1
    2
    5
    4
    6

    Sample Output

    12

    HINT

    结果说明:5+|1-5|+|2-1|+|5-5|+|4-5|+|6-5|=5+4+1+0+1+1=12

    /*
      刚学会写splay,它是在二叉排序树的基础上用伸展和旋转使之更加平衡。
      它可以完成很多操作,如插入节点,删除节点,查前缀和后继,查第k大值,增加一个子树的值,求最大值……
      功能太多,还有标记下放一类的,心好累。
      这里只写了下前缀和后继,以后还会写别的。
    */
    #include<cstdio>
    #include<iostream>
    #define inf 1000000000
    #define N 50010
    using namespace std;
    int tr[N][2],fa[N],num[N],n,rt,size,t1,t2,ans;
    void rotate(int x,int &k){//要旋转的节点,根节点 
        int y=fa[x],z=fa[y],l,r;
        if(tr[y][0]==x)l=0;else l=1;r=l^1;
        if(y==k)k=x;
        else {
            if(tr[z][0]==y)tr[z][0]=x;
            else tr[z][1]=x;
        }
        fa[x]=z;fa[y]=x;fa[tr[x][r]]=y;
        tr[y][l]=tr[x][r];tr[x][r]=y;
    }
    void splay(int x,int &k){//要伸展的节点,根节点 
        int y,z;
        while(x!=k){
            y=fa[x];z=fa[y];
            if(y!=k){
                if((tr[y][0]==x)^(tr[z][0]==y))rotate(x,k);
                else rotate(y,k);
            }
            rotate(x,k);
        }
    }
    void ins(int &k,int x,int last){//根节点,要插入的点,父亲节点 
        if(k==0){size++;k=size;num[k]=x;fa[k]=last;splay(k,rt);return;}
        if(x<num[k])ins(tr[k][0],x,k);
        else ins(tr[k][1],x,k);
    }
    void ask_before(int k,int x){//当前节点,要查询的点 
        if(k==0)return;
        if(num[k]<=x){t1=num[k];ask_before(tr[k][1],x);}
        else ask_before(tr[k][0],x);
    }
    void ask_after(int k,int x){//当前节点,要查询的点 
        if(k==0)return;
        if(num[k]>=x){t2=num[k],ask_after(tr[k][0],x);}
        else ask_after(tr[k][1],x);
    }
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            int x;scanf("%d",&x);
            t1=-inf;t2=inf;
            ask_before(rt,x);
            ask_after(rt,x);
            if(i!=1)ans+=min(x-t1,t2-x);
            else ans+=x;
            ins(rt,x,0);
        }
        printf("%d",ans);
        return 0;
    }
  • 相关阅读:
    Spring boot unable to determine jdbc url from datasouce
    Unable to create initial connections of pool. spring boot mysql
    spring boot MySQL Public Key Retrieval is not allowed
    spring boot no identifier specified for entity
    Establishing SSL connection without server's identity verification is not recommended
    eclipse unable to start within 45 seconds
    Oracle 数据库,远程访问 ora-12541:TNS:无监听程序
    macOS 下安装tomcat
    在macOS 上添加 JAVA_HOME 环境变量
    Maven2: Missing artifact but jars are in place
  • 原文地址:https://www.cnblogs.com/harden/p/6195609.html
Copyright © 2011-2022 走看看