题解:AT_abc441_g [ABC441G] Takoyaki and Flip

· · 题解

分块做法,赛时没调出来。

对于每个位置,维护:

对于每块,维护:

当散块操作或查询之前先重构(计算单点的 cl,ct 和整块的 nm),操作或查询之后重算 mx

重构时:

void rbld(int x) {
    if(!tl[x]) {
        nm[x]=0;
        for(int i=L[x];i<=R[x];i++) {
            if(!(cl[i]&1)) ct[i]+=tt[x],nm[x]++;
            else ct[i]=0;
        }
        tt[x]=0;
        return;
    }
    nm[x]=0;
    for(int i=L[x];i<=R[x];i++) {
        cl[i]+=tl[x];
        if(!(cl[i]&1)) ct[i]=tt[x],nm[x]++;
        else ct[i]=0;
    }
    tt[x]=tl[x]=0;
}

整块操作直接打 tag 即可。

细节比较多,具体看代码。