警示后人,如果你wa#9和#10(针对树状数组套值域开点线段树的做法)
查看原帖
警示后人,如果你wa#9和#10(针对树状数组套值域开点线段树的做法)
673113
king_star楼主2025/7/19 22:07

可能是在k=0,进行修改操作时,只进行了内层值域线段树的频次修改,而忘记了修改后,将原数组更改为新的值。

	for (int i = 1; i <= q; i++) {
		int k = query[i][0], a = query[i][1], b = query[i][2];
		//重大逻辑错误!!!每次进行修改操作都没有修改点权/原数组的值,即少了key[a] = index(b)
		//if (k == 0) outerModify(key[a], index(b), dfn[a]);
		if (k == 0) outerModify(key[a], index(b), dfn[a]), key[a] = index(b);
		else {
			int ans = theKth(dfn[a], dfn[b], k); //将第k小转换为求第k大
			if (ans > 0) write(discret[ans]), std::putchar('\n');
			else std::cout << "invalid request!\n";
		}
	}
2025/7/19 22:07
加载中...