Esempio n. 1
0
inline void Tupdate(int x)
{
    Size(x)=Size(Lch(x))+1+Size(Rch(x));
    Sum(x)=Sum(Lch(x))+Val(x)+Sum(Rch(x));
    Lms(x)=max(Lms(Lch(x)),Sum(Lch(x))+Val(x)+Lms(Rch(x)));
    Rms(x)=max(Rms(Rch(x)),Rms(Lch(x))+Val(x)+Sum(Rch(x)));
    Ms(x)=Rms(Lch(x))+Val(x)+Lms(Rch(x));
    if (Lch(x))    Ms(x)=max(Ms(x),Ms(Lch(x)));
    if (Rch(x))    Ms(x)=max(Ms(x),Ms(Rch(x)));
}
Esempio n. 2
0
int main()
{
    scanf("%d",&N);
    for (int i=1;i<=N;++i)
    {
        scanf("%d",&Val(i));
        Sum(i)=Ms(i)=Lms(i)=Rms(i)=Val(i);
        Par(i)=i-1,Rch(i-1)=i,Size(i)=N-i+1;
        splay(root,i);
    }
    splay(root,1),Par(N+1)=1,Lch(1)=N+1,Size(N+1)=1,splay(root,N+1);
    splay(root,N),Par(N+2)=N,Rch(N)=N+2,Size(N+2)=1,splay(root,N+2);
    tot=N+2;
    for (scanf("%d",&Que);Que--;)
    {
        scanf("%s%d",cmd,&x);
        if (cmd[0]=='D')    D(Findkth(root,x+1));
        else
        {
            scanf("%d",&y);
            if (cmd[0]=='Q')    Q(Findkth(root,x),Findkth(root,y+2));
            else
            if (cmd[0]=='I')    I(Findkth(root,x+1),y);
            else    R(Findkth(root,x+1),y);
        }
    }
	print_r(root); printf("\n");
	print_l(root); printf("\n");
    return 0;
}
Esempio n. 3
0
inline void I(int x,int y)
{
    splay(root,x);
    int v=Lch(x);
    for (;Rch(v);v=Rch(v));
    Rch(v)=++tot,Par(tot)=v,Size(tot)=1;
    Sum(tot)=Ms(tot)=Lms(tot)=Rms(tot)=Val(tot)=y;
    splay(root,tot);
}
Esempio n. 4
0
void AFTimeDataSerie::CalculateDataSerie(const size_t unWindowLength, double& dbTLo, double& dbTHi)
{
    // No calculation is needed: use existing datas.
    if(m_unLength != unWindowLength)
    {
        Destroy();
        m_unLength = unWindowLength;
        Init();
    }

    switch(m_nHandlerType)
    {
        case HT_RMS:       Rms(unWindowLength, dbTLo, dbTHi);      break;
        case HT_DECIMATE : Decimate(unWindowLength, dbTLo, dbTHi); break;
        default:           Decimate(unWindowLength, dbTLo, dbTHi); break;
    }

}