• BZOJ 1588: [HNOI2002]营业额统计 双向链表


    BZOJ 1588: [HNOI2002]营业额统计

    Time Limit: 5 Sec  Memory Limit: 512 MB
    Submit: 9619  Solved: 3287

    题目连接

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

    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

    此题数据有问题,详见讨论版http://www.lydsy.com/JudgeOnline/wttl/wttl.php?pid=1588

    题解:

    标答是伸展树,可是不会怎么办?那就可以像我一样哗啦啦的就水过去就好啦
     
    啊,就是扔进一个数组里面,排序,然后搞啊搞,找到前驱和后继,不断更新就好啦
     
    具体看代码吧,代码很巧~
     
    ~(≧▽≦)/~啦啦啦

    代码:

    //qscqesze
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <ctime>
    #include <iostream>
    #include <algorithm>
    #include <set>
    #include <vector>
    #include <sstream>
    #include <queue>
    #include <typeinfo>
    #include <fstream>
    #include <map>
    typedef long long ll;
    using namespace std;
    //freopen("D.in","r",stdin);
    //freopen("D.out","w",stdout);
    #define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
    #define maxn 400001
    #define mod 10007
    #define eps 1e-9
    //const int inf=0x7fffffff;   //无限大
    const int inf=0x3f3f3f3f;
    /*
    
    */
    //**************************************************************************************
    
    struct node
    {
        int p,v,left,right;
    }a[maxn];
    
    int n,ra[maxn];
    inline bool cmp(node a,node b)
    {
        return a.v<b.v;
    }
    int main()
    {
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i].v;
            a[i].p=i;
        }
        sort(a+1,a+n+1,cmp);
        for(int i=1;i<=n;i++)
        {
            ra[a[i].p]=i;
            a[i].left=i-1;
            a[i].right=i+1;
        }
        a[n].right=0;
        int ans=a[ra[1]].v;
        for(int i=n;i>1;i--)
        {
    
            int x=ra[i];
            if(a[x].left!=0&&a[x].right!=0)
            {
    
                ans+=min(a[x].v-a[a[x].left].v,a[a[x].right].v-a[x].v);
                a[a[x].left].right=a[x].right;
                a[a[x].right].left=a[x].left;
            }
            else if(a[x].left==0)
            {
    
                ans+=a[a[x].right].v-a[x].v;
                a[a[x].right].left=0;
            }
            else
            {
                ans+=a[x].v-a[a[x].left].v;
                a[a[x].left].right=0;
            }
    
        }
        cout<<ans<<endl;
        return 0;
    }
  • 相关阅读:
    C# 序列化与反序列化之DataContract与xml对子类进行序列化的解决方案
    C# 序列化与反序列化之Binary与Soap无法对泛型List<T>进行序列化的解决方案
    大端小端存储方案
    C# 序列化与反序列化Serialization之Json Xml Binary Soap JavaScript序列化
    C# ctpclient networkstream 使用 BinaryReader的ReadString但是使用streamReader的Readtoend不行
    C# TcpListener TcpClient
    C# System.Net.Mail.MailMessage 发邮件
    C# System.Web.Mail.MailMessage 发邮件
    离线环境下使用二进制方式安装配置Kubernetes集群
    Kubernetes基础:查看状态、管理服务
  • 原文地址:https://www.cnblogs.com/qscqesze/p/4378503.html
Copyright © 2020-2023  润新知