忠告线段树20分的同志

P2572 [SCOI2010] 序列操作

Tim0509 @ 2023-03-25 16:44:37

注意你在更新的时候

如果已经到达了完全覆盖的区间,请先pushdown,然后修改标记

如:


void update(ll p,ll ql,ll qr,ll opt){
    ll l=tr[p].l,r=tr[p].r;
    if(l>=ql&&r<=qr){
        pushdown(p);//注意这里
        //注意这里
        //注意这里
        //注意这里
        if(opt==0){
            //赋值为0
            tr[p].ri1=tr[p].le1=tr[p].sum1=tr[p].val1=0;
            tr[p].ri0=tr[p].le0=tr[p].sum0=tr[p].val0=tr[p].len;
            tr[p].tag1=0;
            tr[p].tag2=0;
        }
        if(opt==1){
            //赋值为1 
            tr[p].ri0=tr[p].le0=tr[p].sum0=tr[p].val0=0;
            tr[p].ri1=tr[p].le1=tr[p].sum1=tr[p].val1=tr[p].len;
            tr[p].tag1=1;
            tr[p].tag2=0;
        }
        if(opt==2){
            //取反
            swap(tr[p].le0,tr[p].le1);
            swap(tr[p].ri0,tr[p].ri1);
            swap(tr[p].val0,tr[p].val1);
            swap(tr[p].sum0,tr[p].sum1);
            tr[p].tag2=!tr[p].tag2;
        }
        return;
    }
    ………………//继续递归
}

by zzZZzzZzzZzzzzzZzz @ 2023-07-13 22:34:46

感谢


by QWQ_SenLin @ 2023-07-19 13:44:42

感谢 30->100


by ESTZ @ 2023-08-20 13:00:47

感谢大佬


by Greenzhe @ 2023-10-02 18:59:23

感谢 0->10


|