水题。
#pragma GCC optimize(2) #include <bits/stdc++.h> #define endl '\n' #define ll long long using namespace std; ll tree[1000050],a[1000050],n,m,ans,x; ll lowbit(ll x) { return x&-x; } void add(ll i,ll x) { while(i<=n*n) { tree[i]+=x; i+=lowbit(i); } } ll sum(ll i) { ll res=0; while(i>0) { res+=tree[i]; i-=lowbit(i); } return res; } ll range_sum(ll l,ll r) { return sum(r)-sum(l-1); } int main() { ios::sync_with_stdio(0);cin.tie(0), cout.tie(0); cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { cin>>a[(i-1)*n+j]; if(a[(i-1)*n+j]==1)add((i-1)*n+j,1); } while(m--) { int flag=0;cin>>flag; if(flag==1){ int x1,y1;cin>>x1>>y1; if(a[(x1-1)*n+y1]==1){ a[(x1-1)*n+y1]=0; add((x1-1)*n+y1,-1); } else if(a[(x1-1)*n+y1]==0){ a[(x1-1)*n+y1]=1; add((x1-1)*n+y1,1); } } else if(flag==2){ int x1,y1,x2,y2;cin>>x1>>y1>>x2>>y2; ll ans=0; for(int i=x1;i<=x2;i++) ans+=range_sum((i-1)*n+y1,(i-1)*n+y2); cout<<ans<<endl; } } return 0; }