func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1e5 + 500;   const pair<double, double> inf = make_pair(-1, -1);   pair<double, double> T[N << 2];   double f[N];   int n, m;   inline int read() {     int n = 0;     char c;     for (c = getchar(); c <  0  || c >  9 ; c = getchar())       ;     for (; c >=  0  && c <=  9 ; c = getchar()) n = n * 10 + c -  0 ;     return n;   }   pair<double, double> merg(pair<double, double> t1, pair<double, double> t2) {     double l1 = t1.first, r1 = t1.second, l2 = t2.first, r2 = t2.second;     return make_pair(l1 * l2 / (1 + (l2 - 1) * r1),                      r2 + l2 * (1 - r2) * r1 / (1 - (1 - l2) * r1));   }   void up(int x) { T[x] = merg(T[x << 1], T[x << 1 | 1]); }   void build(int x, int l, int r) {     if (l == r) {       T[x] = make_pair(f[l], f[l]);       return;     }     int mi = (l + r) >> 1;     build(x << 1, l, mi);     build(x << 1 | 1, mi + 1, r);     up(x);   }   void modify(int x, int l, int r, int pos) {     if (l == r) {       T[x] = make_pair(f[l], f[l]);       return;     }     int mi = (l + r) >> 1;     if (pos <= mi)       modify(x << 1, l, mi, pos);     else       modify(x << 1 | 1, mi + 1, r, pos);     up(x);   }   pair<double, double> qry(int x, int l, int r, int L, int R) {     if (L <= l && r <= R) return T[x];     int mi = (l + r) >> 1;     pair<double, double> t1 = inf, t2 = inf;     if (L <= mi) t1 = qry(x << 1, l, mi, L, R);     if (mi < R) t2 = qry(x << 1 | 1, mi + 1, r, L, R);     return t1 == inf ? t2 : (t2 == inf ? t1 : merg(t1, t2));   }   int main() {     n = read(), m = read();     for (int i = 1; i <= n; i++) {       int x = read(), y = read();       f[i] = x * 1.0 / y;     }     build(1, 1, n);     while (m--) {       int kd, x, y, z;       kd = read(), x = read(), y = read();       if (kd == 2) {         pair<double, double> ans = qry(1, 1, n, x, y);         printf( %.10lf n , ans.first);       } else {         z = read();         f[x] = y * 1.0 / z;         modify(1, 1, n, x);       }     }     return 0;   }   