Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //============================================================================
- // Name : 2-D BIT
- // Author : Tarango Khan
- // Team : BRACU Byteheads
- //============================================================================
- #include <bits/stdc++.h>
- using namespace std;
- #define Size 1025
- int maxX = 1025;
- int maxY = 1025;
- int n;
- int A[Size][Size];
- int tree[Size][Size];
- int query(int x, int y) {
- int sum = 0;
- while (x > 0) {
- int y1 = y;
- while (y1 > 0) {
- sum += tree[x][y1];
- y1 -= (y1 & -y1);
- }
- x -= (x & -x);
- }
- return sum;
- }
- void update(int x, int y, int val) {
- while (x <= maxX) {
- int y1 = y;
- while (y1 <= maxY) {
- tree[x][y1] += val;
- y1 += (y1 & -y1);
- }
- x += (x & -x);
- }
- }
- int getRes(int x1, int y1, int x2, int y2) {
- return query(x2, y2) - query(x2, y1 - 1) - query(x1 - 1, y2) + query(x1 - 1, y1 - 1);
- }
- char t[4];
- int main() {
- int nCase,x,y,val;
- int x1, y1, x2, y2;
- scanf("%d", &nCase);
- for (int cs = 1; cs <= nCase; cs++) {
- scanf("%d", &n);
- memset(tree, 0, sizeof tree);
- memset(A, 0, sizeof A);
- while(scanf("%s",t) == 1){
- if(t[0] == 'E') break;
- if (t[1] == 'E') {
- scanf("%d %d %d", &x, &y ,&val);
- x++, y++;
- int prev = A[x][y];
- int nVal = val-prev;
- A[x][y] = val;
- update(x, y, nVal);
- } else {
- scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
- x1++, y1++, x2++, y2++;
- int res = getRes(x1, y1, x2, y2);
- printf("%d\n", res);
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment