2 条题解

  • 2
    @ 2025-3-25 13:49:32

    转化成一维查分就可以写了 #include<bits/stdc++.h>

    using namespace std;

    int A[10007][10007];

    int B[10007][10007];

    int main()

    {

    int n,m,q;

    cin>>n>>m>>q;

    for(int i=1;i<=n;i++)

    {

    for(int j=1;j<=m;j++)

    {

    cin>>A[i][j];

    B[i][j]=A[i][j]-A[i][j-1];

    }

    }

    for(int i=1;i<=q;i++)

    {

    int a,b,c,d,e;

    cin>>a>>b>>c>>d>>e;

    for(int j=a;j<=c;j++)

    {

    B[j][b]+=e;

    B[j][d+1]-=e;

    }

    }

    for(int i=1;i<=n;i++)

    {

    for(int j=1;j<=m;j++)

    {

    B[i][j]+=B[i][j-1];

    cout<<B[i][j]<<" ";

    }

    cout<<endl;

    }

    return 0;

    }

    • 1
      @ 2025-3-23 15:18:57
      #include<bits/stdc++.h>
      using namespace std;
      int diff[1001][1001];
      int a[1001][1001]; 
      int n,m;
      void build() {
      	for(int i=1; i<=n; i++) {
      		for(int j=1; j<=m; j++) {
      			diff[i][j]+= diff[i-1][j]+diff[i][j-1]-diff[i-1][j-1];
      		}
      	}
      }
      void add(int x1,int y1,int x2,int y2,int d) {
      	diff[x1][y1]+=d;
      	diff[x2+1][y1]-=d;
      	diff[x1][y2+1]-=d;
      	diff[x2+1][y2+1]+=d;
      
      }
      int main() {
      	int q;
      	cin>>n>>m>>q;
      	for(int i=1; i<=n; i++) {
      		for(int j=1; j<=m; j++) {
      			cin>>a[i][j];
      			diff[i][j] = a[i][j] - a[i-1][j] - a[i][j-1] + a[i-1][j-1];
      		}
      	}
      	for(int i=1;i<=q;i++){
      		int x1,y1,x2,y2,d;
      		cin>>x1>>y1>>x2>>y2>>d;
      		add(x1,y1,x2,y2,d);
      	}
      	build();
      	for(int i=1; i<=n; i++) {
      		for(int j=1; j<=m; j++) {
      			cout<<diff[i][j]<<" ";
      		}
      		cout<<endl;
      	}
      	return 0;
      }
      
      
      • 1

      信息

      ID
      809
      时间
      1000ms
      内存
      256MiB
      难度
      6
      标签
      递交数
      22
      已通过
      10
      上传者