警示后人:如果你只能过 #2 和全部hack(包括讨论区)

P2572 [SCOI2010] 序列操作

TH911 @ 2024-12-21 15:24:09

检查你的两个标记中是否取消了另一个标记。 比如我的 pushdown() 是这样的:

void down(int p){
    if(t[p].set!=-1){
        t[p<<1].cnt[t[p].set]=size(p<<1);
        t[p<<1].cnt[t[p].set^1]=0;
        t[p<<1].len[t[p].set]=size(p<<1);
        t[p<<1].len[t[p].set^1]=0;
        t[p<<1].pre[t[p].set]=size(p<<1);
        t[p<<1].pre[t[p].set^1]=0;
        t[p<<1].suf[t[p].set]=size(p<<1);
        t[p<<1].suf[t[p].set^1]=0;
        t[p<<1].set=t[p].set;
        t[p<<1].reverse=false;//这里!!

        t[p<<1|1].cnt[t[p].set]=size(p<<1|1);
        t[p<<1|1].cnt[t[p].set^1]=0;
        t[p<<1|1].len[t[p].set]=size(p<<1|1);
        t[p<<1|1].len[t[p].set^1]=0;
        t[p<<1|1].pre[t[p].set]=size(p<<1|1);
        t[p<<1|1].pre[t[p].set^1]=0;
        t[p<<1|1].suf[t[p].set]=size(p<<1|1);
        t[p<<1|1].suf[t[p].set^1]=0;
        t[p<<1|1].set=t[p].set;
        t[p<<1|1].reverse=false;//这里!!

        t[p].set=-1;
    }

    if(t[p].reverse){
        swap(t[p<<1].cnt[0],t[p<<1].cnt[1]);
        swap(t[p<<1].len[0],t[p<<1].len[1]);
        swap(t[p<<1].pre[0],t[p<<1].pre[1]);
        swap(t[p<<1].suf[0],t[p<<1].suf[1]);
        t[p<<1].reverse=!t[p<<1].reverse;

        swap(t[p<<1|1].cnt[0],t[p<<1|1].cnt[1]);
        swap(t[p<<1|1].len[0],t[p<<1|1].len[1]);
        swap(t[p<<1|1].pre[0],t[p<<1|1].pre[1]);
        swap(t[p<<1|1].suf[0],t[p<<1|1].suf[1]);
        t[p<<1|1].reverse=!t[p<<1|1].reverse;

        t[p].reverse=false;
    }
}

先推平再翻转的话,推平后就应该取消翻转

包括下面的比如说推平函数:

void set(int p,int l,int r,int k){
    if(l<=t[p].l&&t[p].r<=r){
        t[p].cnt[k]=size(p);
        t[p].cnt[k^1]=0;
        t[p].len[k]=size(p);
        t[p].len[k^1]=0;
        t[p].pre[k]=size(p);
        t[p].pre[k^1]=0;
        t[p].suf[k]=size(p);
        t[p].suf[k^1]=0;

        t[p].set=k;
        t[p].reverse=false;//这!!!!!
        return;
    }
    down(p);
    if(l<=t[p<<1].r)set(p<<1,l,r,k);
    if(t[p<<1|1].l<=r)set(p<<1|1,l,r,k);
    up(p);
}

总而言之就是这俩标记会互相影响,然后就会使你 WA 掉。

就这三行卡了我将近 3 个小时。。。


by one_of_the_person @ 2024-12-21 15:39:57

@TH911 %%%


|