// Problem: E - Average and Median // Contest: AtCoder - AtCoder Beginner Contest 236 // URL: https://atcoder.jp/contests/abc236/tasks/abc236_e // Memory Limit: 1024 MB // Time Limit: 2000 ms // TestType: single // // Powered by CP Editor (https://cpeditor.org)
/* Name: Author: xiaruize Date: */ #include<bits/stdc++.h> usingnamespace std; #define int long long #define ull unsigned long long #define MOD 1000000007 #define ALL(a) (a).begin(), (a).end() #define pb push_back #define mk make_pair #define pii pair<int, int> #define pis pair<int, string> #define sec second #define fir first #define sz(a) int((a).size()) #define double long double #define INF 0x3f3f3f3f #define debug(c, x) cerr << c << ':' << x << endl; constint N = 1e5 + 10;
// bool st; int n; int a[N]; double b[N]; int c[N]; double dp[N][3]; int d[N]; int f[N][3]; // bool en;
boolcheck1(double x) { for (int i = 1; i <= n; i++) { dp[i][1] = max(dp[i - 1][1], dp[i - 1][0]) + b[i]; dp[i][0] = dp[i - 1][1]; } if (max(dp[n][0], dp[n][1]) >= 0) returntrue; returnfalse; }
boolcheck2(int x) { for (int i = 1; i <= n; i++) { if (a[i] >= c[x]) d[i] = 1; else d[i] = -1; } f[0][0] = f[0][1] = -1; for (int i = 1; i <= n; i++) { f[i][0] = f[i - 1][1]; f[i][1] = max(f[i - 1][1], f[i - 1][0]) + d[i]; } if (max(f[n][1], f[n][0]) >= 0) returntrue; returnfalse; }
signedmain() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); // freopen(".in","r",stdin); // freopen(".out","w",stdout); // cerr<<(&en-&st)/1024.0/1024.0<<endl; cin >> n; for (int i = 1; i <= n; i++) cin >> a[i], c[i] = a[i]; sort(c + 1, c + n + 1); double l = 1.0, r = 1e9 * 1.0; while (r - l >= 1e-6) { double mid = (r + l) / 2; for (int i = 1; i <= n; i++) b[i] = a[i] - mid; if (check1(mid)) l = mid; else r = mid; } int ll = 1, rr = n; while (ll < rr) { int mid = (ll + rr + 1) >> 1; if (check2(mid)) ll = mid; else rr = mid - 1; } cout << l << endl << c[ll] << endl; return0; }