求助一个二维离散的问题
1097
2023.01.18
发布于 未知归属地

遇到一个二维差分需要离散化,差分的核心代码如下,请问每一对下标的第一对,为什么要对下标-1

	scanf("%d%d%d", &n, &m, &q);
	for (int i = 1; i <= q; i++) {
		int x1, y1, x2, y2, d;
		scanf("%d%d%d%d%d", &x1, &y1, &x2, &y2, &d);
		op[i] = { x1, y1, x2, y2, d };
		numx.push_back(x1 - 1); //这里
		numx.push_back(x2);
		numy.push_back(y1 - 1); //这里
		numy.push_back(y2);
	}
	sort(numx.begin(), numx.end());
	numx.erase(unique(numx.begin(), numx.end()), numx.end());
	sort(numy.begin(), numy.end());
	numy.erase(unique(numy.begin(), numy.end()), numy.end());
	for (int i = 1; i <= q; i++) {
		auto [x1, y1, x2, y2, d] = op[i];
		x1 = lower_bound(numx.begin(), numx.end(), x1 - 1) - numx.begin() + 1;
		x2 = lower_bound(numx.begin(), numx.end(), x2) - numx.begin();
		y1 = lower_bound(numy.begin(), numy.end(), y1 - 1) - numy.begin() + 1;
		y2 = lower_bound(numy.begin(), numy.end(), y2) - numy.begin();
		a[x1][y1] += d;
		a[x1][y2 + 1] -= d;
		a[x2 + 1][y1] -= d;
		a[x2 + 1][y2 + 1] += d;
	}
评论 (12)