#include<bits/stdc++.h>
using namespace std;
#define OPEN(PATH) freopen(PATH".INP", "r", stdin); freopen(PATH".OUT", "w", stdout);
#define FOR(i, a, b) for (int i = (a); i <= (b); ++i)
#define FOD(i, a, b) for (int i = (a); i >= (b); --i)
#define REP(i, n) for (int i = 0; i < (n); ++i)
#define MASK(n) (1LL << (n))
#define BIT(i, n) (((n) >> (i)) & 1)
#define pb push_back
#define fi first
#define se second
#define ll long long
#define db double
#define ull unsigned ll
#define pii pair<int, int>
#define pll pair<ll, ll>
#define pli pair<ll, int>
#define pil pair<int, ll>
#define all(x) x.begin(), x.end()
#define sz(s) (int)s.size()
#define el cout << '\n'
#define elif else if
template <class GAU, class VN>
bool maximize(GAU &x, const VN &y)
{
if (x < y)
{
x = y;
return true;
}
else return false;
}
template <class GAU, class VN>
bool minimize(GAU &x, const VN &y)
{
if (x > y)
{
x = y;
return true;
}
else return false;
}
const int N = 1e6;
int q;
ll bit1[N + 7], bit2[N + 7];
void update(ll bit[], int idx, ll val)
{
for (; idx <= N; idx += idx & -idx) bit[idx] += val;
}
ll get(ll bit[], int idx)
{
ll ret = 0;
for (; idx > 0; idx -= idx & -idx) ret += bit[idx];
return ret;
}
void solve()
{
int type;
while (q--)
{
cin >> type;
if (type == 1)
{
int x; ll v; cin >> x >> v;
update(bit1, x + 1, v);
}
elif (type == 2)
{
int y; ll v; cin >> y >> v;
update(bit2, y + 1, v);
}
else
{
int x, y, u, v; cin >> x >> y >> u >> v;
if (x > u) swap(x, u);
if (y > v) swap(y, v);
ll disU = u - x, disV = v - y;
db res = 0.0;
if (disU)
res += (db)(get(bit1, u) - get(bit1, x)) / disU;
else
res += (db)(get(bit1, x + 1) - get(bit1, x));
if (disV)
res += (db)(get(bit2, v) - get(bit2, y)) / disV;
else
res += (db)(get(bit2, y + 1) - get(bit2, y));
cout << fixed << setprecision(8) << res, el;
}
}
}
void process()
{
cin >> q;
solve();
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
process();
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgT1BFTihQQVRIKSBmcmVvcGVuKFBBVEgiLklOUCIsICJyIiwgc3RkaW4pOyBmcmVvcGVuKFBBVEgiLk9VVCIsICJ3Iiwgc3Rkb3V0KTsKI2RlZmluZSBGT1IoaSwgYSwgYikgZm9yIChpbnQgaSA9IChhKTsgaSA8PSAoYik7ICsraSkKI2RlZmluZSBGT0QoaSwgYSwgYikgZm9yIChpbnQgaSA9IChhKTsgaSA+PSAoYik7IC0taSkKI2RlZmluZSBSRVAoaSwgbikgZm9yIChpbnQgaSA9IDA7IGkgPCAobik7ICsraSkKI2RlZmluZSBNQVNLKG4pICgxTEwgPDwgKG4pKQojZGVmaW5lIEJJVChpLCBuKSAoKChuKSA+PiAoaSkpICYgMSkKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGRiIGRvdWJsZQojZGVmaW5lIHVsbCB1bnNpZ25lZCBsbAojZGVmaW5lIHBpaSBwYWlyPGludCwgaW50PgojZGVmaW5lIHBsbCBwYWlyPGxsLCBsbD4KI2RlZmluZSBwbGkgcGFpcjxsbCwgaW50PgojZGVmaW5lIHBpbCBwYWlyPGludCwgbGw+CiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSwgeC5lbmQoKQojZGVmaW5lIHN6KHMpIChpbnQpcy5zaXplKCkKI2RlZmluZSBlbCBjb3V0IDw8ICdcbicKI2RlZmluZSBlbGlmIGVsc2UgaWYKCnRlbXBsYXRlIDxjbGFzcyBHQVUsIGNsYXNzIFZOPgpib29sIG1heGltaXplKEdBVSAmeCwgY29uc3QgVk4gJnkpCnsKICAgIGlmICh4IDwgeSkKICAgIHsKICAgICAgICB4ID0geTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGVsc2UgcmV0dXJuIGZhbHNlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgR0FVLCBjbGFzcyBWTj4KYm9vbCBtaW5pbWl6ZShHQVUgJngsIGNvbnN0IFZOICZ5KQp7CiAgICBpZiAoeCA+IHkpCiAgICB7CiAgICAgICAgeCA9IHk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBlbHNlIHJldHVybiBmYWxzZTsKfQoKY29uc3QgaW50IE4gPSAxZTY7CmludCBxOwpsbCBiaXQxW04gKyA3XSwgYml0MltOICsgN107Cgp2b2lkIHVwZGF0ZShsbCBiaXRbXSwgaW50IGlkeCwgbGwgdmFsKQp7CiAgICBmb3IgKDsgaWR4IDw9IE47IGlkeCArPSBpZHggJiAtaWR4KSBiaXRbaWR4XSArPSB2YWw7Cn0KbGwgZ2V0KGxsIGJpdFtdLCBpbnQgaWR4KQp7CiAgICBsbCByZXQgPSAwOwogICAgZm9yICg7IGlkeCA+IDA7IGlkeCAtPSBpZHggJiAtaWR4KSByZXQgKz0gYml0W2lkeF07CiAgICByZXR1cm4gcmV0Owp9Cgp2b2lkIHNvbHZlKCkKewogICAgaW50IHR5cGU7CiAgICB3aGlsZSAocS0tKQogICAgewogICAgICAgIGNpbiA+PiB0eXBlOwogICAgICAgIGlmICh0eXBlID09IDEpCiAgICAgICAgewogICAgICAgICAgICBpbnQgeDsgbGwgdjsgY2luID4+IHggPj4gdjsKICAgICAgICAgICAgdXBkYXRlKGJpdDEsIHggKyAxLCB2KTsKICAgICAgICB9CiAgICAgICAgZWxpZiAodHlwZSA9PSAyKQogICAgICAgIHsKICAgICAgICAgICAgaW50IHk7IGxsIHY7IGNpbiA+PiB5ID4+IHY7CiAgICAgICAgICAgIHVwZGF0ZShiaXQyLCB5ICsgMSwgdik7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGludCB4LCB5LCB1LCB2OyBjaW4gPj4geCA+PiB5ID4+IHUgPj4gdjsKICAgICAgICAgICAgaWYgKHggPiB1KSBzd2FwKHgsIHUpOwogICAgICAgICAgICBpZiAoeSA+IHYpIHN3YXAoeSwgdik7CiAgICAgICAgICAgIGxsIGRpc1UgPSB1IC0geCwgZGlzViA9IHYgLSB5OwogICAgICAgICAgICBkYiByZXMgPSAwLjA7CiAgICAgICAgICAgIGlmIChkaXNVKQogICAgICAgICAgICAgICAgcmVzICs9IChkYikoZ2V0KGJpdDEsIHUpIC0gZ2V0KGJpdDEsIHgpKSAvIGRpc1U7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHJlcyArPSAoZGIpKGdldChiaXQxLCB4ICsgMSkgLSBnZXQoYml0MSwgeCkpOwoKICAgICAgICAgICAgaWYgKGRpc1YpCiAgICAgICAgICAgICAgICByZXMgKz0gKGRiKShnZXQoYml0MiwgdikgLSBnZXQoYml0MiwgeSkpIC8gZGlzVjsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcmVzICs9IChkYikoZ2V0KGJpdDIsIHkgKyAxKSAtIGdldChiaXQyLCB5KSk7CiAgICAgICAgICAgIGNvdXQgPDwgZml4ZWQgPDwgc2V0cHJlY2lzaW9uKDgpIDw8IHJlcywgZWw7CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIHByb2Nlc3MoKQp7CiAgICBjaW4gPj4gcTsKICAgIHNvbHZlKCk7Cn0KCnNpZ25lZCBtYWluKCkKewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwogICAgY291dC50aWUoMCk7CiAgICBwcm9jZXNzKCk7CiAgICByZXR1cm4gMDsKfQoKCg==