尝试 Hack

P4097 【模板】李超线段树 / [HEOI2013] Segment

Adison_yyds @ 2023-05-02 19:50:15

可能能 Hack 第三篇题解?

作者的 update 是这么写的

void update(int rt,int l,int r,int ql,int qr,int i){
        if(ql<=l&&r<=qr){
            //没有直接更新 
            if(!id[rt]) return id[rt]=i,void();
            int mid=(l+r)>>1;//更新的时候交换,可能被淘汰的线段在左右区间会是最优线段
            if(f[i](mid)-f[id[rt]](mid)>eps) swap(i,id[rt]);
            //等于时让编号小的去更新 
            if(f[i](l)-f[id[rt]](l)>eps||(f[i](l)==f[id[rt]](l)&&i<id[rt])) update(lson,ql,qr,i);
            if(f[i](r)-f[id[rt]](r)>eps||(f[i](r)==f[id[rt]](r)&&i<id[rt])) update(rson,ql,qr,i);
            return;
        }
        int mid=(l+r)>>1;
        if(ql<=mid) update(lson,ql,qr,i);
        if(mid<qr) update(rson,ql,qr,i);
    }

发现他在新线段完全优于旧线段的情况下好像会遍历整棵子树 那么我只要造组数据使得当前线段完全优于前一个线段就可以卡掉


|