Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //2D BIT
- // in update function indx can't start from 0
- int n; ll tree[1025][1025];char str[5];
- void update(int x,int y,ll val){
- for(int i = x;i<=n;i+=(i&-i)){
- for(int j = y;j<=n;j+=(j&-j)){
- tree[i][j] += val;
- }
- }
- }
- ll query(int x,int y){
- ll sum = 0;
- for(int i = x;i>0;i-=(i&-i)){
- for(int j = y;j>0;j-=(j&-j)){
- sum += tree[i][j];
- }
- }
- return sum;
- }
- int main()
- {
- booster()
- //read("input.txt");
- int t;
- scani(t);
- while(t--){
- scani(n);
- for(int i = 0;i<=n;i++){
- for(int j = 0;j<=n;j++)tree[i][j] = 0;
- }
- string s;
- while(1){
- scanf("%s",str);
- string s = str;
- if(s=="END")break;
- if(s=="SET"){
- int uu,vv,val;
- scani3(uu,vv,val);
- uu ++;
- vv ++;
- ll pp = query(uu,vv) - query(uu-1,vv) - query(uu,vv-1) + query(uu-1,vv-1);
- update(uu,vv,val-pp);
- }
- else {
- int a,b,c,d;
- scani4(a,b,c,d);
- a ++;b ++;c ++;d ++;
- printf("%lld\n",query(c,d) - query(a-1,d) - query(c,b-1) + query(a-1,b-1));
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement