警示后人
查看原帖
警示后人
289056
北射天狼楼主2023/7/18 21:18

维护第二个答案的树状数组,用 cntcnt 来维护单个节点个数,tree2tree2 来维护前缀和。

if (cnt[x] == 1 && val == -1){
    	for (int i=x;i<=N;i+=lowbit(i))
    	    tree2[i] -= 1;
    	cnt[x] = 0;
	} else if (cnt[x] == 0 && val == 1){
		for (int i=x;i<=N;i+=lowbit(i))
    	    tree2[i] += 1;
    	cnt[x] = 1;
	}

如果你这么写,那很明显是错的。因为 cntcnt 数组只会有 00 或 11 的状态。

应把 cnt[x] += val 放到 if 语句外边。

2023/7/18 21:18
加载中...