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

    宠物收养所简化版,treap有些细节不要写错。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<cstdlib>
    #include<ctime>
    #define maxn 100005
    using namespace std;
    long long ls[maxn],rs[maxn],value[maxn],fix[maxn],root=0;
    long long ans=0,n,now,tot=0,l=-1,r=-1;
    void lturn(long long &k)
    {
    long long t=rs[k];rs[k]=ls[t];
    ls[t]=k;k=t;
    }
    void rturn(long long &k)
    {
    long long t=ls[k];ls[k]=rs[t];
    rs[t]=k;k=t;
    }
    void insert(long long &k,long long x)
    {
    if (k==0)
    {
    k=++tot;
    value[tot]=x;
    ls[tot]=0;rs[tot]=0;
    fix[tot]=rand();
    return;
    }
    else
    {
    if (x>value[k])
    {
    insert(rs[k],x);
    if (fix[rs[k]]<fix[k])
    lturn(k);
    }
    else
    {
    insert(ls[k],x);
    if (fix[ls[k]]<fix[k])
    rturn(k);
    }
    }
    }
    void pre(long long k,long long x)
    {
    if (k==0) return;
    if (x>=value[k])
    {
    l=value[k];
    pre(rs[k],x);
    }
    else pre(ls[k],x);
    }
    void sub(long long k,long long x)
    {
    if (k==0) return;
    if (x<=value[k])
    {
    r=value[k];
    sub(ls[k],x);
    }
    else sub(rs[k],x);
    }
    void work()
    {
    scanf("%lld",&now);
    pre(root,now);
    sub(root,now);
    if (l==-1) {ans=ans+abs(r-now);insert(root,now);return;}
    if (r==-1) {ans=ans+abs(l-now);insert(root,now);return;}
    l=abs(l-now);r=abs(r-now);
    ans=ans+min(l,r);
    l=-1;r=-1;
    insert(root,now);
    }
    int main()
    {
    srand(time(0));
    scanf("%lld",&n);
    scanf("%lld",&now);
    ans=now;
    insert(root,now);
    for (long long k=2;k<=n;k++)
    work();
    printf("%lld ",ans);
    return 0;
    }

  • 相关阅读:
    终于回来了&&邮递员送信
    发射站
    黑匣子
    利维坦——(1)
    预告
    整除(水题)
    BZOJ054_移动玩具_KEY
    BZOJ4034_树上操作_KEY
    树链剖分学习&BZOJ1036
    BZOJ1208_宠物收养所_KEY
  • 原文地址:https://www.cnblogs.com/ziliuziliu/p/5200892.html
Copyright © 2011-2022 走看看