#include #include #include using namespace std;int n,m,q,tree[105][305][305],color[305][305];inline int lowbit(int x){return x&(-x);}inline void add(int color,int x,int y,int add){ for(int i=x;i<=n;i+=lowbit(i)){ for(int j=y;j<=m;j+=lowbit(j)){ tree[color][i][j]+=add; } }}inline int query(int color,int x,int y){ int ans=0; for(int i=x;i;i-=lowbit(i)){ for(int j=y;j;j-=lowbit(j)){ ans+=tree[color][i][j]; } } return ans;}int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ scanf("%d",&color[i][j]); add(color[i][j],i,j,1); } } scanf("%d",&q); while(q--){ int opt; scanf("%d",&opt); if(opt==1){ int x,y,c; scanf("%d%d%d",&x,&y,&c); add(color[x][y],x,y,-1); color[x][y]=c; add(color[x][y],x,y,1); } else if(opt==2){ int x1,x2,y1,y2,c; scanf("%d%d%d%d%d",&x1,&x2,&y1,&y2,&c); printf("%d\n",query(c,x2,y2)-query(c,x2,y1-1)-query(c,x1-1,y2)+query(c,x1-1,y1-1)); //注意x1,y1要减一 } }}