func_code_string: #include <bits/stdc++.h>   using namespace std;   long long n, t[1000 * 1000], a[1000 * 1000], b[1000 * 1000], v, ans;   map<long long, long long> w;   long long get(int v, int tl, int tr, int l, int r) {     if (r < tl || tr < l) return 0;     if (l <= tl && tr <= r) return t[v];     int m = (tl + tr) >> 1;     return max(get(v + v, tl, m, l, min(r, m)),                get(v + v + 1, m + 1, tr, max(l, m + 1), r));   }   void upd(int v, int l, int r, int p, long long x) {     if (l == r)       t[v] = x;     else {       int m = (l + r) >> 1;       if (p <= m)         upd(v + v, l, m, p, x);       else         upd(v + v + 1, m + 1, r, p, x);       t[v] = max(t[v + v], t[v + v + 1]);     }   }   int main() {     cin >> n;     for (int i = 1; i <= n; i++) {       long long r, h;       cin >> r >> h;       b[i] = a[i] = ((r) * (r)) * h;     }     sort(b + 1, b + 1 + n);     for (int i = 1; i <= n; i++) w[b[i]] = i;     for (int i = 1; i <= n; i++) {       v = get(1, 1, n, 1, w[a[i]] - 1) + a[i];       upd(1, 1, n, w[a[i]], v);       ans = max(ans, v);     }     printf( %.7f , ans * acos(-1));   }   