蒟蒻求助。。。S(p)lay锅了。。。

P3391 【模板】文艺平衡树

CreeperLordVader @ 2019-07-24 16:49:34

样例的第一次翻转就挂了。。。

貌似是在第二次split时splay操作出了问题

void splay(int& o,int k)
{
    int d=tr[o].cmp(k);
    if(d==1)k-=tr[tr[o].ch[0]].s+1;
    if(d>=0)
    {
        int p=tr[o].ch[d];
        int d2=tr[p].cmp(k);
        int k2=(d2?k-tr[tr[p].ch[0]].s-1:k);
        if(d2>=0)
        {
            pushdown(p);
            splay(tr[p].ch[d2],k2);
            if(d==d2)rotate(o,d^1);
            else rotate(tr[o].ch[d],d);
        }
        rotate(o,d^1);
    }
}
int merge(int left,int right)
{
    splay(left,tr[left].s);
    tr[left].ch[1]=right;
    update(left);
    return left;
}
void split(int o,int k,int& left,int& right)
{
    splay(o,k);
    left=o;
    right=tr[o].ch[1];
    tr[o].ch[1]=0;
    update(left);
}
        int l,r;
        read(l);
        read(r);
        int o,left,mid,right;
        split(rt,l,left,o);
        split(o,r+1,mid,right);
        tr[mid].flip^=1;
        rt=merge(merge(left,mid),right);

|