#include <bits/stdc++.h>
using namespace std;
inline void read(int &x) {
  int v = 0, f = 1;
  char c = getchar();
  while (!isdigit(c) && c != '-') c = getchar();
  if (c == '-')
    f = -1;
  else
    v = v * 10 + c - '0';
  while (isdigit(c = getchar())) v = v * 10 + c - '0';
  x = v * f;
}
inline void read(long long &x) {
  long long v = 0ll, f = 1ll;
  char c = getchar();
  while (!isdigit(c) && c != '-') c = getchar();
  if (c == '-')
    f = -1;
  else
    v = v * 10 + c - '0';
  while (isdigit(c = getchar())) v = v * 10 + c - '0';
  x = v * f;
}
inline void readc(char &x) {
  char c;
  while ((c = getchar()) == ' ')
    ;
  x = c;
}
inline void writes(string s) { puts(s.c_str()); }
inline void writeln() { writes(""); }
inline void writei(int x) {
  if (x < 0) {
    putchar('-');
    x = abs(x);
  }
  if (!x) putchar('0');
  char a[25];
  int top = 0;
  while (x) {
    a[++top] = (x % 10) + '0';
    x /= 10;
  }
  while (top) {
    putchar(a[top]);
    top--;
  }
}
inline void writell(long long x) {
  if (x < 0) {
    putchar('-');
    x = abs(x);
  }
  if (!x) putchar('0');
  char a[25];
  int top = 0;
  while (x) {
    a[++top] = (x % 10) + '0';
    x /= 10;
  }
  while (top) {
    putchar(a[top]);
    top--;
  }
}
long long n, m, i, j, lc[100005], rc[100005], lt[100005], rt[100005],
    cc[100005], sum[100005], mi[100005], rnd[100005], t[100005], c[100005], op,
    x, y, z, rtt, cnt;
set<pair<long long, long long> > s;
long long nwnd(long long x, long long y) {
  cnt++;
  t[cnt] = lt[cnt] = rt[cnt] = x;
  c[cnt] = cc[cnt] = y;
  rnd[cnt] = rand() * 32768 + rand();
  return cnt;
}
long long suf(long long x) {
  while (rc[x]) x = rc[x];
  return x;
}
long long pre(long long x) {
  while (lc[x]) x = lc[x];
  return x;
}
void pushup(long long x) {
  if (!x) exit(-15);
  lt[x] = rt[x] = t[x];
  cc[x] = c[x];
  sum[x] = mi[x] = 0;
  if (lc[x]) {
    lt[x] = lt[lc[x]];
    mi[x] = min(mi[x], mi[lc[x]]);
    sum[x] += sum[lc[x]];
    sum[x] += cc[lc[x]] * (t[x] - rt[lc[x]]);
    mi[x] = min(mi[x], sum[x]);
  }
  if (rc[x]) {
    rt[x] = rt[rc[x]];
    cc[x] = cc[rc[x]];
    sum[x] += c[x] * (lt[rc[x]] - t[x]);
    mi[x] = min(mi[x], sum[x]);
    mi[x] = min(mi[x], sum[x] + mi[rc[x]]);
    sum[x] += sum[rc[x]];
    mi[x] = min(mi[x], sum[x]);
  }
}
void split(long long x, long long y, long long &l, long long &r) {
  if (!x) {
    l = r = 0;
    return;
  }
  if (t[x] <= y) {
    split(rc[x], y, rc[x], r);
    pushup(x);
    l = x;
  } else {
    split(lc[x], y, l, lc[x]);
    pushup(x);
    r = x;
  }
}
long long merge(long long x, long long y) {
  if (!x || !y) return x + y;
  if (rnd[x] < rnd[y]) {
    rc[x] = merge(rc[x], y);
    pushup(x);
    return x;
  } else {
    lc[y] = merge(x, lc[y]);
    pushup(y);
    return y;
  }
}
double solve(long long x, long long y, long long z) {
  if (lc[x]) {
    if (z + mi[lc[x]] <= 0) return solve(lc[x], t[x], z);
    z += sum[lc[x]] + cc[lc[x]] * (t[x] - rt[lc[x]]);
    if (z <= 0) return t[x] - 1.0 * z / cc[lc[x]];
  }
  if (rc[x]) {
    z += c[x] * (lt[rc[x]] - t[x]);
    if (z <= 0) return lt[rc[x]] - 1.0 * z / c[x];
    if (z + mi[rc[x]] <= 0) return solve(rc[x], y, z);
    z += sum[rc[x]];
  }
  z += cc[x] * (y - rt[x]);
  return y - 1.0 * z / cc[x];
}
int main() {
  read(n);
  if ((1) <= ((n)))
    for (((i)) = (1); ((i)) <= ((n)); ((i))++) {
      read(op);
      if (op == 1) {
        read(x);
        read(y);
        long long t1, t2;
        split(rtt, x, t1, t2);
        rtt = merge(merge(t1, nwnd(x, y)), t2);
      }
      if (op == 2) {
        read(x);
        long long t1, t2, t3, t4;
        split(rtt, x, t1, t2);
        split(t1, x - 1, t3, t4);
        rtt = merge(t3, t2);
      }
      if (op == 3) {
        read(x);
        read(y);
        read(z);
        if (!z) {
          printf("%d\n", x);
          continue;
        }
        long long t1, t2, t3, t4;
        split(rtt, x - 1, t1, t2);
        split(t2, y, t3, t4);
        if (!t3 || min(mi[t3], sum[t3] + (y - rt[t3]) * cc[t3]) + z > 0) {
          puts("-1");
        } else
          printf("%.10f\n", solve(t3, y, z));
        rtt = merge(merge(t1, t3), t4);
      }
    }
  return 0;
}
