提交时间:2024-04-14 20:36:49

运行 ID: 28499

#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e6 + 9, C = 50; int n, a[N], nxt[N], lst[N], p[N]; void del(int u) { nxt[lst[u]] = nxt[u], lst[nxt[u]] = lst[u]; } double ans, pw[N]; int main() { scanf("%d", &n); pw[0] = 1, pw[1] = 0.5; for (int i = 2; i <= n + 1; i++) { scanf("%d", &a[i]); pw[i] = 0.5 * pw[i - 1], p[i] = i; nxt[i] = i + 1, lst[i] = i - 1; } a[1] = a[n + 2] = 1e9, lst[1] = nxt[n + 2] = 0; sort(p + 2, p + n + 2, [&](int x, int y) {return a[x] < a[y];}); for (int id = 2; id <= n + 1; id++) { int i = p[id], lt = i; double s1 = 0, s2 = 0; for (int j = i, c = 1; j && c <= C; j = lst[j]) { // if (a[j] < a[i]) {del(j); continue;} s1 += (lt - j) * pw[c++], lt = j; } lt = i; for (int j = nxt[i], c = 1; j && c <= C; j = nxt[j]) { // if (a[j] <= a[i]) {del(j); continue;} s2 += (j - lt) * pw[c++], lt = j; } ans += 4.0 * a[i] * s1 * s2; del(i); } printf("%.15f\n", ans / n / n); return 0; }