2536. 子矩阵元素加 1
思路:二维差分模板题。这里需要注意的就是边界处理,数组下标不从1开始就得注意边界。
(二维差分矩阵模板) acwing 798. 差分矩阵
class Solution {
public:
void solve(vector<vector<int>> &v,int x1,int y1,int x2,int y2){
v[x1][y1]++;
if(y2+1<v.size()) v[x1][y2+1]--;
if(x2+1<v.size()) v[x2+1][y1]--;
if(y2+1<v.size()&&x2+1<v.size()) v[x2+1][y2+1]++;
}
vector<vector<int>> rangeAddQueries(int n, vector<vector<int>>& queries) {
vector<vector<int>> v(n,vector<int>(n,0));
for(int i=0;i<queries.size();i++){
solve(v,queries[i][0],queries[i][1],queries[i][2],queries[i][3]);
}
for(int i=1;i<n;i++){
v[i][0]+=v[i-1][0];
v[0][i]+=v[0][i-1];
}
for(int i=1;i<n;i++){
for(int j=1;j<n;j++){
v[i][j]+=v[i-1][j]+v[i][j-1]-v[i-1][j-1];
}
}
return v;
}
};