func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 1E6 + 10;   int n, a[maxn][20], b[maxn][20], c[maxn], LOG[maxn];   bool Judge(int l, int r) {     int len = LOG[r - l + 1];     int A = 100 * max(a[l][len], a[r - (1 << len) + 1][len]);     int B = min(b[l][len], b[r - (1 << len) + 1][len]);     return A < B;   }   int main() {     int k;     cin >> n >> k;     for (int i = 1; i <= n; i++) scanf( %d , &a[i][0]);     for (int i = 1; i <= n; i++) scanf( %d , &b[i][0]);     for (int j = 1; j < 20; j++)       for (int i = 1; i <= n; i++) {         if (i + (1 << j - 1) > n) break;         a[i][j] = max(a[i][j - 1], a[i + (1 << (j - 1))][j - 1]);         b[i][j] = min(b[i][j - 1], b[i + (1 << (j - 1))][j - 1]);       }     int now = 0, sum = 1;     for (int i = 1; i <= n; i++) {       if (sum >= i)         LOG[i] = now - 1;       else {         sum <<= 1;         ++now;         LOG[i] = now - 1;       }     }     LOG[1] = 0;     for (int i = 1; i <= n; i++) {       int L, R;       L = i;       R = n;       while (R - L > 1) {         int mid = (L + R) >> 1;         if (Judge(i, mid))           L = mid;         else           R = mid;       }       int len = LOG[L - i + 1];       int A = 100 * max(a[i][len], a[L - (1 << len) + 1][len]);       int B = min(b[i][len], b[L - (1 << len) + 1][len]);       c[i] = min(A, B);       len = LOG[R - i + 1];       A = 100 * max(a[i][len], a[R - (1 << len) + 1][len]);       B = min(b[i][len], b[R - (1 << len) + 1][len]);       c[i] = max(c[i], min(A, B));     }     sort(c + 1, c + n + 1);     double ans = 0;     double N = n - 1;     double M = k - 1;     double v = (double)(k) / (double)(n);     for (int i = 1; i <= n; i++) {       if (n - i < k - 1) break;       ans += v * (double)(c[i]);       v = v / N * (N - M);       N -= 1.00;     }     printf( %.10f , ans);     return 0;   }   