如果你的线段树查询是三段式的,注意在最后以 mid 为分界点两段查询后,合并时也要判断mid 和 mid+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;
}
}
(希望你不要和我一样栽进这种愚蠢的坑里QAQ)