fork(2) download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define inf (1<<30)
  5. #define INF (int)1e9
  6. #define EPS 1e-9
  7. #define PI 3.1415926535897932384626433832795
  8. #define MOD 1000000007
  9. #define MAX 1000000
  10.  
  11. //#define write(x) freopen(x,"w",stdout);
  12. //#define read(x) freopen(x,"r",stdin);
  13. #define D(x) cerr << #x " = " << (x) <<endl;
  14.  
  15. inline int setBit(int N, int pos) { return N = N | (1<<pos);}
  16. inline int resetBit(int N, int pos) { return N = N & ~(1<<pos);}
  17. inline bool checkBit(int N, int pos) { return (bool) (N & ( 1<<pos));}
  18. //setbase - cout << setbase (16); cout << 100 << endl; Prints 64
  19. //setfill - cout << setfill ('x') << setw (5); cout << 77 << endl; prints xxx77
  20. //setprecision - cout << setprecision (4) << f << endl; Prints x.xxxx
  21.  
  22. //int fx[] = {+0, +0, +1, -1, -1, +1, -1, +1};
  23. //int fy[] = {-1, +1, +0, +0, +1, +1, -1, -1};
  24.  
  25. typedef long long ll;
  26. typedef unsigned long long ui64;
  27. typedef string st;
  28. typedef long long int lli;
  29. typedef vector<int> vi;
  30. typedef vector<st> vs;
  31. typedef map<int,int> mii;
  32. typedef map<st,int> msi;
  33. typedef set<int> si;
  34. typedef set<st> ss;
  35. typedef pair<int,int> pii;
  36. typedef vector<pii> vpii;
  37. typedef vector<ll> vll;
  38. ll tree[1030][1030];
  39. int N;
  40. void updatey(int x,int y,lli val){
  41. while(y<=N){
  42. tree[x][y]+=val;
  43. y+=(y & (-y));
  44. }
  45. }
  46. void update(int x,int y,lli val){
  47. while(x<=N){
  48. updatey(x,y,val);
  49. x+=(x & (-x));
  50. }
  51. }
  52. lli ready(int x,int y){
  53. lli sum=0;
  54. while(y>0){
  55. sum+=tree[x][y];
  56. y-=(y & (-y));
  57. }
  58. return sum;
  59. }
  60. lli read(int x,int y){
  61. lli sum=0;
  62. while(x>0){
  63. sum+=ready(x,y);
  64. x-=(x & (-x));
  65. }
  66. return sum;
  67. }
  68. int main() {
  69. // ios_base::sync_with_stdio(false);
  70. //cin.tie(NULL);
  71. int t;
  72. scanf("%d",&t);
  73. while(t--){
  74. scanf("%d",&N);
  75. memset(tree,0,sizeof(tree));
  76. char str[5];
  77. while(1){
  78. // cout<<1<<endl;
  79. scanf("%s",str);
  80. if(strcmp(str,"SET")==0){
  81. int x,y;
  82. lli val;
  83. scanf("%d %d %lld",&x,&y,&val);
  84. //changes here
  85. int a1=read(x+1,y+1)- read(x,y+1)-read(x+1,y)+read(x,y);
  86. //int a1=read(x+1,y+1)-read(x,y);
  87. update(x+1,y+1,-a1);
  88. update(x+1,y+1,val);
  89. }
  90. else if(strcmp(str,"SUM")==0){
  91. int x1,y1,x2,y2;
  92. scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
  93. //changes here
  94. lli ans=read(x2+1,y2+1)+read(x1,y1)-read(x1,y2+1)-read(x2+1,y1);
  95. printf("%lld\n",ans);
  96. }
  97. else if(strcmp(str,"END")==0)
  98. break;
  99. }
  100. printf("\n");
  101. }
  102. //cout<<"Execution time : "<<tick();
  103. return 0;
  104. }
Success #stdin #stdout 0s 23528KB
stdin
1
4
SET 0 0 1
SUM 0 0 3 3
SET 2 2 12
SUM 2 2 2 2
SUM 2 2 3 3
SUM 0 0 2 2
END
stdout
1
12
12
13