【题解】 P2234 [HNOI2002]营业额统计

平衡树板题

原题传送门

这道题要用Splay,我博客里有对Splay的详细介绍

这道题目还算比较模板的

每输入一个数,先不要插入

要求一下前驱和后继与x差的最小值并加到答案中

再把x插入平衡树

然后你会发现过不了样例

发现相同的数字是会有的

所以还要写find函数,要多加一个变量来比最小:

find(x)!=0?0:inf;

剩下就没什么问题了qaq

#pragma GCC optimize("O3")
#include 
#define root tree[0].ch[1]
#define inf 1000000005
using namespace std;
inline int read()
{
    register int x=0,f=1;register char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
    return x*f;
}
inline int Min(register int a,register int b)
{
    return aans)
            ans=tree[now].v;
        if(v>tree[now].v)
            now=tree[now].ch[1];
        else
            now=tree[now].ch[0];
    }
    return ans;
}
inline int upper(register int v)
{
    int now=root;
    int ans=inf;
    while(now)
    {
        if(tree[now].v>v&&tree[now].v

你可能感兴趣的:(【题解】 P2234 [HNOI2002]营业额统计)