遇到一个二维差分需要离散化,差分的核心代码如下,请问每一对下标的第一对,为什么要对下标-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;
}