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))); }
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; }
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); }
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; } }