func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 1e6 + 5;   int n, k;   int v[MAXN], c[MAXN], a[MAXN];   double f[MAXN];   int rv[MAXN][20], rc[MAXN][20];   inline int GetV(int l, int r) {     int x = log2(r - l + 1);     return max(rv[l][x], rv[r + 1 - (1 << x)][x]);   }   inline int GetC(int l, int r) {     int x = log2(r - l + 1);     return min(rc[l][x], rc[r + 1 - (1 << x)][x]);   }   inline int Cal(int pos) {     if (100 * v[pos] > c[pos]) return c[pos];     int left = pos, right = n, t;     while (left <= right) {       int mid = (left + right) >> 1;       if (GetV(pos, mid) * 100 <= GetC(pos, mid)) {         t = mid;         left = mid + 1;       } else         right = mid - 1;     }     int ans = GetV(pos, t) * 100;     if (t < n) ans = max(ans, GetC(pos, t + 1));     return ans;   }   int main() {     scanf( %d%d , &n, &k);     for (int i = 1; i <= n; ++i) scanf( %d , &v[i]);     for (int i = 1; i <= n; ++i) scanf( %d , &c[i]);     for (int i = 1; i <= n; ++i) rv[i][0] = v[i], rc[i][0] = c[i];     int lgn = log2(n);     for (int j = 1; j <= lgn; ++j) {       int last = n + 1 - (1 << j);       for (int i = 1; i <= last; ++i) {         rv[i][j] = max(rv[i][j - 1], rv[i + (1 << (j - 1))][j - 1]);         rc[i][j] = min(rc[i][j - 1], rc[i + (1 << (j - 1))][j - 1]);       }     }     for (int i = 1; i <= n; ++i) a[i] = Cal(i);     f[0] = 1.0 * k / (n - k + 1);     for (int i = 1; i <= n - k + 1; ++i)       f[i] = f[i - 1] * (n - i - k + 2) / (n - i + 1);     sort(a + 1, a + n + 1);     double ans = 0;     for (int i = 1; i <= n - k + 1; ++i) ans += a[i] * f[i];     cout << fixed << setprecision(9) << ans << endl;     return 0;   }   