近视后任
查看原帖
近视后任
700151
_coastline_楼主2025/6/12 20:21

如果你的线段树查询是三段式的,注意在最后以 mid 为分界点两段查询后,合并时也要判断midmid+1两处的颜色值是否相同,相同时需要将最终结果 -1。

int query(int op, int L, int R)
{
    int mid = (tr[op].l + tr[op].r) >> 1;
    if(tr[op].l == L && tr[op].r == R)
        return tr[op].sum;
    
    pushdown(op);
    if(R <= mid)
        return query(op*2, L, R);
    else if(L > mid)
        return query(op*2+1, L, R);
    else   ///!!!
    {
        int ans = query(op*2, L, mid) + query(op*2+1, mid+1, R);
        if(query_col(1, mid) == query_col(1, mid+1))
            ans --;
        return ans;
    }
}
// query_col() 是我自己写的一个单点查询颜色的函数 qwq

(希望你不要和我一样栽进这种愚蠢的坑里QAQ)

2025/6/12 20:21
加载中...