zoukankan      html  css  js  c++  java
  • tyvj1185营业额统计

    描述 Description

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

    输入格式 InputFormat

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

    输出格式 OutputFormat

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

    样例输入 SampleInput 

    6
    5
    1
    2
    5
    4
    6

    样例输出 SampleOutput 

    12
    

    数据范围和注释 Hint

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

    bzoj卡了……不开心

    平衡树裸题。写了个treap的

    #include<cstdio>
    #include<ctime>
    #include<cstdlib>
    #define maxnum 1000001
    #define inf 1000000000
    struct node{
    int l,r,num,rando;
    }tree[maxnum];
    int treesize,root,n,ans,t1,t2;
    int min(int a,int b)
    {return a<b?a:b;}
    void right_rotate(int &work)
    {
    int t = tree[work].l;
    tree[work].l = tree[t].r;
    tree[t].r = work;
    work = t;
    }
    void left_rotate(int &work)
    {
    int t = tree[work].r;
    tree[work].r = tree[t].l;
    tree[t].l = work;
    work = t;
    }
    void insert(int &now,int x)
    {
    if (now == 0)
    {
    now = ++treesize;
    tree[now].rando = rand()%maxnum;
    tree[now].num = x;
    return;
    }
    if (x < tree[now].num)
    {
    insert(tree[now].l,x);
    if (tree[tree[now].l].rando < tree[now].rando) right_rotate(now);
    }
    else
    {
    insert(tree[now].r,x);
    if (tree[tree[now].r].rando < tree[now].rando) left_rotate(now);
    }
    }
    void ask_before(int now,int x)
    {
        if(!now)return;
        if(x>=tree[now].num){t1=tree[now].num;ask_before(tree[now].r,x);}
        else ask_before(tree[now].l,x);
    }
    void ask_after(int now,int x)
    {
        if(!now)return;
        if(x<=tree[now].num){t2=tree[now].num;ask_after(tree[now].l,x);}
        else ask_after(tree[now].r,x);
    }
    int main()
    {
    srand(time(0));
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
    {
    int x;
    if(scanf("%d",&x)==EOF)x=0;
            t1=-inf;t2=inf;
            ask_before(root,x);
            ask_after(root,x);
            if(i!=1)ans+=min(x-t1,t2-x);
            else ans+=x;
            insert(root,x);
      }
    printf("%d",ans);
    return 0;
    }


    ——by zhber,转载请注明来源
  • 相关阅读:
    ubuntu12.04 死机 卡屏 画面冻结解决方案
    Install Firefox 20 in Ubuntu 13.04, Ubuntu 12.10, Ubuntu 12.04, Linux Mint 14 and Linux Mint 13 by PPA
    ListView1.SelectedItems.Clear()
    android studio 下载地址
    jquery.slider.js jquery幻灯片测试
    jquery.hovermenu.js
    jquery.tab.js选项卡效果
    适配 placeholder,jquery版
    jquery.autoscroll.js jquery自动滚动效果
    将 Google Earth 地图集成到自己的窗体上的 简单控件
  • 原文地址:https://www.cnblogs.com/zhber/p/4036107.html
Copyright © 2011-2022 走看看