模拟操作,用二维矩阵存储,修改的时候直接修改,查询的时候遍历矩形区域。

#include <bits/stdc++.h>
using namespace std;
int a[1010][1010];
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    while(m--)
    {
        int obj;
        scanf("%d",&obj);
        {
            if(obj==1)
            {
                int i,j;
                scanf("%d%d",&i,&j);
                a[i][j]=(a[i][j]==0);
            }
            else
            {
                int i1,j1,i2,j2;
                scanf("%d%d%d%d",&i1,&j1,&i2,&j2);
                int ans=0;
                for(int i=i1;i<=i2;i++)
                {
                    for(int j=j1;j<=j2;j++)
                    {
                        ans+=a[i][j];
                    }
                }
                printf("%d\n",ans);
            }
        }
    }
}