#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cassert>
using namespace std;
/*
* A lógica do isleaf não é necessária pra uma segtree de soma
* (mas resolvi incluí-la pra mostrar como generalizar a técnica
* para uma segtree de máximo, por exemplo)
*/
int tree[2*1024][2*1024];
int roots[2][20], isleaf[2][20], sizes[2];
int xy, A, B, only_contained;
void gen(int root, int st, int end) {
if(st > B || end < A) return;
if((st >= A && end <= B) || !only_contained) {
roots[xy][sizes[xy]] = root;
isleaf[xy][sizes[xy]++] = !(end-st);
}
if(st >= A && end <= B) return;
int mid = (st+end)/2;
gen(2*root+1, st, mid);
gen(2*root+2, mid+1, end);
}
int main() {
int s,ins;
while (1) {
scanf("%d", &ins);
switch(ins) {
case 3:
return 0;
case 0:
scanf("%d", &s);
memset(tree,0,sizeof(tree));
break;
case 1:
int x,y,a;
scanf("%d %d %d", &x,&y,&a);
sizes[0] = 0; xy = 0; A = x; B = x; only_contained = false;
gen(0, 0, s-1);
sizes[1] = 0; xy = 1; A = y; B = y; only_contained = false;
gen(0, 0, s-1);
for(int i = sizes[0]-1; i >= 0; i--)
for(int j = sizes[1]-1; j >= 0; j--) {
int r0 = roots[0][i], r1 = roots[1][j];
tree[r0][r1] += a;
}
/*
// Com o array isleaf, deveria ser:
for(int i = sizes[0]-1; i >= 0; i--)
for(int j = sizes[1]-1; j >= 0; j--) {
int r0 = roots[0][i], r1 = roots[1][j];
if(!isleaf[0][i])
tree[r0][r1] = tree[2*r0+1][r1] + tree[2*r0+2][r1];
else if(!isleaf[1][j])
tree[r0][r1] = tree[r0][2*r1+1] + tree[r0][2*r1+2];
else
tree[r0][r1] += a;
}
// Mas esse código só recebe 85 pontos! Cadê o bug?
// Será que eu estou processando os intervalos na ordem errada?
*/
break;
case 2:
int l,r,b,t;
scanf("%d %d %d %d", &l,&b,&r,&t);
sizes[0] = 0; xy = 0; A = l; B = r; only_contained = true;
gen(0, 0, s-1);
sizes[1] = 0; xy = 1; A = b; B = t; only_contained = true;
gen(0, 0, s-1);
int ans = 0;
for(int i = sizes[0]-1; i >= 0; i--)
for(int j = sizes[1]-1; j >= 0; j--) {
int r0 = roots[0][i], r1 = roots[1][j];
ans += tree[r0][r1];
}
printf("%d\n", ans);
break;
}
}
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGNzdHJpbmc+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxjYXNzZXJ0PgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8qCiAqIEEgbMOzZ2ljYSBkbyBpc2xlYWYgbsOjbyDDqSBuZWNlc3PDoXJpYSBwcmEgdW1hIHNlZ3RyZWUgZGUgc29tYQogKiAobWFzIHJlc29sdmkgaW5jbHXDrS1sYSBwcmEgbW9zdHJhciBjb21vIGdlbmVyYWxpemFyIGEgdMOpY25pY2EKICogcGFyYSB1bWEgc2VndHJlZSBkZSBtw6F4aW1vLCBwb3IgZXhlbXBsbykKICovCgppbnQgdHJlZVsyKjEwMjRdWzIqMTAyNF07CmludCByb290c1syXVsyMF0sIGlzbGVhZlsyXVsyMF0sIHNpemVzWzJdOwoKaW50IHh5LCBBLCBCLCBvbmx5X2NvbnRhaW5lZDsKdm9pZCBnZW4oaW50IHJvb3QsIGludCBzdCwgaW50IGVuZCkgewogICAgaWYoc3QgPiBCIHx8IGVuZCA8IEEpIHJldHVybjsKICAgIGlmKChzdCA+PSBBICYmIGVuZCA8PSBCKSB8fCAhb25seV9jb250YWluZWQpIHsKICAgICAgICByb290c1t4eV1bc2l6ZXNbeHldXSA9IHJvb3Q7CiAgICAgICAgaXNsZWFmW3h5XVtzaXplc1t4eV0rK10gPSAhKGVuZC1zdCk7CiAgICB9CiAgICBpZihzdCA+PSBBICYmIGVuZCA8PSBCKSByZXR1cm47CgogICAgaW50IG1pZCA9IChzdCtlbmQpLzI7CiAgICBnZW4oMipyb290KzEsIHN0LCBtaWQpOwogICAgZ2VuKDIqcm9vdCsyLCBtaWQrMSwgZW5kKTsKfQoKaW50IG1haW4oKSB7CiAgICBpbnQgcyxpbnM7CiAgICB3aGlsZSAoMSkgewogICAgICAgIHNjYW5mKCIlZCIsICZpbnMpOwoKICAgICAgICBzd2l0Y2goaW5zKSB7CiAgICAgICAgY2FzZSAzOgogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgIHNjYW5mKCIlZCIsICZzKTsKICAgICAgICAgICAgbWVtc2V0KHRyZWUsMCxzaXplb2YodHJlZSkpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgIGludCB4LHksYTsKICAgICAgICAgICAgc2NhbmYoIiVkICVkICVkIiwgJngsJnksJmEpOwoKICAgICAgICAgICAgc2l6ZXNbMF0gPSAwOyB4eSA9IDA7IEEgPSB4OyBCID0geDsgb25seV9jb250YWluZWQgPSBmYWxzZTsKICAgICAgICAgICAgZ2VuKDAsIDAsIHMtMSk7CiAgICAgICAgICAgIHNpemVzWzFdID0gMDsgeHkgPSAxOyBBID0geTsgQiA9IHk7IG9ubHlfY29udGFpbmVkID0gZmFsc2U7CiAgICAgICAgICAgIGdlbigwLCAwLCBzLTEpOwoKICAgICAgICAgICAgZm9yKGludCBpID0gc2l6ZXNbMF0tMTsgaSA+PSAwOyBpLS0pCiAgICAgICAgICAgICAgICBmb3IoaW50IGogPSBzaXplc1sxXS0xOyBqID49IDA7IGotLSkgewogICAgICAgICAgICAgICAgICAgIGludCByMCA9IHJvb3RzWzBdW2ldLCByMSA9IHJvb3RzWzFdW2pdOwogICAgICAgICAgICAgICAgICAgIHRyZWVbcjBdW3IxXSArPSBhOwogICAgICAgICAgICAgICAgfQovKgogICAgICAgICAgICAvLyBDb20gbyBhcnJheSBpc2xlYWYsIGRldmVyaWEgc2VyOgogICAgICAgICAgICBmb3IoaW50IGkgPSBzaXplc1swXS0xOyBpID49IDA7IGktLSkKICAgICAgICAgICAgICAgIGZvcihpbnQgaiA9IHNpemVzWzFdLTE7IGogPj0gMDsgai0tKSB7CiAgICAgICAgICAgICAgICAgICAgaW50IHIwID0gcm9vdHNbMF1baV0sIHIxID0gcm9vdHNbMV1bal07CgogICAgICAgICAgICAgICAgICAgIGlmKCFpc2xlYWZbMF1baV0pCiAgICAgICAgICAgICAgICAgICAgICAgIHRyZWVbcjBdW3IxXSA9IHRyZWVbMipyMCsxXVtyMV0gKyB0cmVlWzIqcjArMl1bcjFdOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoIWlzbGVhZlsxXVtqXSkKICAgICAgICAgICAgICAgICAgICAgICAgdHJlZVtyMF1bcjFdID0gdHJlZVtyMF1bMipyMSsxXSArIHRyZWVbcjBdWzIqcjErMl07CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICB0cmVlW3IwXVtyMV0gKz0gYTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gTWFzIGVzc2UgY8OzZGlnbyBzw7MgcmVjZWJlIDg1IHBvbnRvcyEgQ2Fkw6ogbyBidWc/CiAgICAgICAgICAgIC8vIFNlcsOhIHF1ZSBldSBlc3RvdSBwcm9jZXNzYW5kbyBvcyBpbnRlcnZhbG9zIG5hIG9yZGVtIGVycmFkYT8KKi8KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAyOgogICAgICAgICAgICBpbnQgbCxyLGIsdDsKICAgICAgICAgICAgc2NhbmYoIiVkICVkICVkICVkIiwgJmwsJmIsJnIsJnQpOwoKICAgICAgICAgICAgc2l6ZXNbMF0gPSAwOyB4eSA9IDA7IEEgPSBsOyBCID0gcjsgb25seV9jb250YWluZWQgPSB0cnVlOwogICAgICAgICAgICBnZW4oMCwgMCwgcy0xKTsKICAgICAgICAgICAgc2l6ZXNbMV0gPSAwOyB4eSA9IDE7IEEgPSBiOyBCID0gdDsgb25seV9jb250YWluZWQgPSB0cnVlOwogICAgICAgICAgICBnZW4oMCwgMCwgcy0xKTsKCiAgICAgICAgICAgIGludCBhbnMgPSAwOwogICAgICAgICAgICBmb3IoaW50IGkgPSBzaXplc1swXS0xOyBpID49IDA7IGktLSkKICAgICAgICAgICAgICAgIGZvcihpbnQgaiA9IHNpemVzWzFdLTE7IGogPj0gMDsgai0tKSB7CiAgICAgICAgICAgICAgICAgICAgaW50IHIwID0gcm9vdHNbMF1baV0sIHIxID0gcm9vdHNbMV1bal07CiAgICAgICAgICAgICAgICAgICAgYW5zICs9IHRyZWVbcjBdW3IxXTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHByaW50ZigiJWRcbiIsIGFucyk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMDsKfQoK