#include <bits/stdc++.h>
#define ll long long
#define all(v) v.begin(),v.end()
#define MASK(i) (1LL << (i))
#define ii pair<int,int>
#define fi first
#define se second
#define endl '\n'
#define forr(i,l,r,add) for(int i = l;i <= r; i = i + add)
#define fodd(i,l,r,sub) for(int i = l;i >= r ; i = i - sub)
template <typename T1, typename T2> bool minimize(T1 &a, T2 b) {if (a > b) {a = b; return true;} return false;}
template <typename T1, typename T2> bool maximize(T1 &a, T2 b) {if (a < b) {a = b; return true;} return false;}
using namespace std;
mt19937 rd(chrono::steady_clock::now().time_since_epoch().count());
#define rand rd
long long Rand(long long l , long long h){
assert(l <= h);
return l + 1ll * rd() % (h - l + 1) * (rd() % (h - l + 1)) % (h - l + 1);
}
//////////////////////////////////////////////////////////// end of template ////////////////////////////////////////////////////////////
const int MAX = 1e6 + 5;
int SZ = 1e6 + 1;
int num;
#define ldb long double
int fenwick[2][MAX];
void update(int fen[] , int u , int val){
while(u <= SZ){
fen[u] += val;
u += u & -u;
}
}
int GET(int fen[] , int u){
int sum = 0;
while(u) sum = sum + fen[u] , u -= u & -u;
return sum;
}
int calc(int ok , int l , int r){
return GET(fenwick[ok] , r) - GET(fenwick[ok] , l - 1);
}
void INP(){
cin >> num;
while(num--){
int dk;
cin >> dk;
if(dk == 1){
int x , val;
cin >> x >> val;
x++;
update(fenwick[0] , x , val);
}
else if(dk == 2){
int x , val;
cin >> x >> val;
x++;
update(fenwick[1] , x , val);
}
else {
int a , b , x , y;
cin >> a >> b >> x >> y;
if(a > x) swap(a , x);
if(b > y) swap(b , y);
a++ , b++ , x++ , y++;
ldb res = 0;
int d = abs(a - x);
if(a == x){
int tmp = calc(0 , a , a);
res += (ldb) tmp / max(1 , d);
}
else {
int tmp = calc(0 , a , x - 1);
res += (ldb) tmp / max(1 , d);
}
d = abs(b - y);
if(b == y){
int tmp = calc(1 , y , y);
res += (ldb) tmp / max(1 , d);
}
else {
int tmp = calc(1 , b , y - 1);
res += (ldb) tmp / max(1 , d);
}
cout << setprecision(10) << fixed << res << endl;
}
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
#define TASK ""
//freopen(TASK".inp" , "r" , stdin);
//freopen(TASK".out" , "w" , stdout);
INP();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgYWxsKHYpIHYuYmVnaW4oKSx2LmVuZCgpCiNkZWZpbmUgTUFTSyhpKSAoMUxMIDw8IChpKSkKI2RlZmluZSBpaSBwYWlyPGludCxpbnQ+CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBlbmRsICdcbicKI2RlZmluZSBmb3JyKGksbCxyLGFkZCkgZm9yKGludCBpID0gbDtpIDw9IHI7IGkgPSBpICsgYWRkKQojZGVmaW5lIGZvZGQoaSxsLHIsc3ViKSBmb3IoaW50IGkgPSBsO2kgPj0gciA7IGkgPSBpIC0gc3ViKQp0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPiBib29sIG1pbmltaXplKFQxICZhLCBUMiBiKSB7aWYgKGEgPiBiKSB7YSA9IGI7IHJldHVybiB0cnVlO30gcmV0dXJuIGZhbHNlO30KdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4gYm9vbCBtYXhpbWl6ZShUMSAmYSwgVDIgYikge2lmIChhIDwgYikge2EgPSBiOyByZXR1cm4gdHJ1ZTt9IHJldHVybiBmYWxzZTt9Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKbXQxOTkzNyByZChjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkudGltZV9zaW5jZV9lcG9jaCgpLmNvdW50KCkpOwojZGVmaW5lIHJhbmQgcmQKCmxvbmcgbG9uZyBSYW5kKGxvbmcgbG9uZyBsICwgbG9uZyBsb25nIGgpewoJYXNzZXJ0KGwgPD0gaCk7CglyZXR1cm4gbCArIDFsbCAqIHJkKCkgJSAoaCAtIGwgKyAxKSAqIChyZCgpICUgKGggLSBsICsgMSkpICUgKGggLSBsICsgMSk7Cn0KCgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gZW5kIG9mIHRlbXBsYXRlIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKY29uc3QgaW50IE1BWCA9IDFlNiArIDU7CmludCBTWiA9IDFlNiArIDE7CmludCBudW07CiNkZWZpbmUgbGRiIGxvbmcgZG91YmxlCgppbnQgZmVud2lja1syXVtNQVhdOwoKdm9pZCB1cGRhdGUoaW50IGZlbltdICwgaW50IHUgLCBpbnQgdmFsKXsKICAgIHdoaWxlKHUgPD0gU1opewogICAgICAgIGZlblt1XSArPSB2YWw7CiAgICAgICAgdSArPSB1ICYgLXU7CiAgICB9Cn0KCmludCBHRVQoaW50IGZlbltdICwgaW50IHUpewogICAgaW50IHN1bSA9IDA7CiAgICB3aGlsZSh1KSBzdW0gPSBzdW0gKyBmZW5bdV0gLCB1IC09IHUgJiAtdTsKICAgIHJldHVybiBzdW07Cn0KCmludCBjYWxjKGludCBvayAsIGludCBsICwgaW50IHIpewogICAgcmV0dXJuIEdFVChmZW53aWNrW29rXSAsIHIpIC0gR0VUKGZlbndpY2tbb2tdICwgbCAtIDEpOwp9Cgp2b2lkIElOUCgpewogICAgY2luID4+IG51bTsKICAgIHdoaWxlKG51bS0tKXsKICAgICAgICBpbnQgZGs7CiAgICAgICAgY2luID4+IGRrOwogICAgICAgIGlmKGRrID09IDEpewogICAgICAgICAgICBpbnQgeCAsIHZhbDsKICAgICAgICAgICAgY2luID4+IHggPj4gdmFsOwogICAgICAgICAgICB4Kys7CiAgICAgICAgICAgIHVwZGF0ZShmZW53aWNrWzBdICwgeCAsIHZhbCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYoZGsgPT0gMil7CiAgICAgICAgICAgIGludCB4ICwgdmFsOwogICAgICAgICAgICBjaW4gPj4geCA+PiB2YWw7CiAgICAgICAgICAgIHgrKzsKICAgICAgICAgICAgdXBkYXRlKGZlbndpY2tbMV0gLCB4ICwgdmFsKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGludCBhICwgYiAsIHggLCB5OwogICAgICAgICAgICBjaW4gPj4gYSA+PiBiID4+IHggPj4geTsKICAgICAgICAgICAgaWYoYSA+IHgpIHN3YXAoYSAsIHgpOwogICAgICAgICAgICBpZihiID4geSkgc3dhcChiICwgeSk7CiAgICAgICAgICAgIGErKyAsIGIrKyAsIHgrKyAsIHkrKzsKICAgICAgICAgICAgbGRiIHJlcyA9IDA7CiAgICAgICAgICAgIGludCBkID0gYWJzKGEgLSB4KTsKICAgICAgICAgICAgaWYoYSA9PSB4KXsKICAgICAgICAgICAgICAgIGludCB0bXAgPSBjYWxjKDAgLCBhICwgYSk7CiAgICAgICAgICAgICAgICByZXMgKz0gKGxkYikgdG1wIC8gbWF4KDEgLCBkKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGludCB0bXAgPSBjYWxjKDAgLCBhICwgeCAtIDEpOwogICAgICAgICAgICAgICAgcmVzICs9IChsZGIpIHRtcCAvIG1heCgxICwgZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZCA9IGFicyhiIC0geSk7CiAgICAgICAgICAgIGlmKGIgPT0geSl7CiAgICAgICAgICAgICAgICBpbnQgdG1wID0gY2FsYygxICwgeSAsIHkpOwogICAgICAgICAgICAgICAgcmVzICs9IChsZGIpIHRtcCAvIG1heCgxICwgZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBpbnQgdG1wID0gY2FsYygxICwgYiAsIHkgLSAxKTsKICAgICAgICAgICAgICAgIHJlcyArPSAobGRiKSB0bXAgLyBtYXgoMSAsIGQpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBjb3V0IDw8IHNldHByZWNpc2lvbigxMCkgPDwgZml4ZWQgPDwgcmVzIDw8IGVuZGw7CiAgICAgICAgfQogICAgfQp9CgppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZSgwKTsKICAgIGNvdXQudGllKDApOwogICAgI2RlZmluZSBUQVNLICIiCiAgICAvL2ZyZW9wZW4oVEFTSyIuaW5wIiAsICJyIiAsIHN0ZGluKTsKICAgIC8vZnJlb3BlbihUQVNLIi5vdXQiICwgInciICwgc3Rkb3V0KTsKICAgIElOUCgpOwogICAgcmV0dXJuIDA7Cn0K