fork download
  1. //Lib
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cstdlib>
  5. #include<cmath>
  6. #include<ctime>
  7.  
  8. #include<iostream>
  9. #include<algorithm>
  10. #include<vector>
  11. #include<string>
  12. #include<queue>
  13. #include<stack>
  14. #include<set>
  15. #include<map>
  16. using namespace std;
  17. //Macro
  18. #define rep(i,a,b) for(int i=a,tt=b;i<=tt;++i)
  19. #define drep(i,a,b) for(int i=a,tt=b;i>=tt;--i)
  20. #define erep(i,e,x) for(int i=x;i;i=e[i].next)
  21. #define irep(i,x) for(__typeof(x.begin()) i=x.begin();i!=x.end();i++)
  22. #define brep(i,a,b) for(int i=a;i<=b;i+=lowbit(i))
  23. #define bdrep(i,a) for(int i=a;i>0;i-=lowbit(i))
  24. #define read() (strtol(ipos,&ipos,10))
  25. #define sqr(x) ((x)*(x))
  26. #define pb push_back
  27. #define PS system("pause");
  28. typedef long long ll;
  29. typedef pair<int,int> pii;
  30. const int oo=~0U>>1;
  31. const double inf=1e100;
  32. const double eps=1e-6;
  33. string name="", in=".in", out=".out";
  34. //Var
  35. struct BIT
  36. {
  37. int f[308][308],xl,yl;
  38. inline int lowbit(int x){return x&-x;}
  39. void Set(int x,int y){memset(f,0,sizeof f);xl=x;yl=y;}
  40. void Update(int x,int y,int delta)
  41. {
  42. brep(i,x,xl)brep(j,y,yl)
  43. f[i][j]+=delta;
  44. }
  45. int Get(int x1,int y1,int x2,int y2)
  46. {
  47. int ret=0;
  48. bdrep(i,x2)bdrep(j,y2)ret+=f[i][j];
  49. bdrep(i,x1-1)bdrep(j,y2)ret-=f[i][j];
  50. bdrep(i,x2)bdrep(j,y1-1)ret-=f[i][j];
  51. bdrep(i,x1-1)bdrep(j,y1-1)ret+=f[i][j];
  52. return ret;
  53. }
  54. }T[101];
  55. int n,m,q;
  56. int mat[308][308];
  57. void Work()
  58. {
  59. int x,y,c,order,x1,y1,x2,y2;
  60. scanf("%d%d",&n,&m);
  61. rep(i,1,100)T[i].Set(n,m);
  62. rep(i,1,n)rep(j,1,m)
  63. {
  64. scanf("%d",&mat[i][j]);
  65. T[mat[i][j]].Update(i,j,1);
  66. }
  67. scanf("%d",&q);
  68. rep(i,1,q)
  69. {
  70. scanf("%d",&order);
  71. if(order==1)
  72. {
  73. scanf("%d%d%d",&x,&y,&c);
  74. T[mat[x][y]].Update(x,y,-1);
  75. mat[x][y]=c;
  76. T[mat[x][y]].Update(x,y,1);
  77. }
  78. else
  79. {
  80. scanf("%d%d%d%d%d",&x1,&x2,&y1,&y2,&c);
  81. printf("%d\n",T[c].Get(x1,y1,x2,y2));
  82. }
  83. }
  84. }
  85. int main()
  86. {
  87. // freopen((name+in).c_str(),"r",stdin);
  88. // freopen((name+out).c_str(),"w",stdout);
  89. // Init();
  90. Work();
  91. return 0;
  92. }
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty