Advertisement
Guest User

sportprog........

a guest
Apr 22nd, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.71 KB | None | 0 0
  1. //#pragma GCC optimize("Ofast,no-stack-protector")
  2. //#pragma GCC target("avx")
  3. #include <iostream>
  4. #include <vector>
  5. #include <algorithm>
  6. #include <fstream>
  7. #include <functional>
  8. #include <cmath>
  9. #include <set>
  10. #include <deque>
  11. #include <queue>
  12. #include <utility>
  13. #include <map>
  14. #include <string>
  15. #include <iomanip>
  16. #include <utility>
  17. #include <ctype.h>
  18. #include <stdio.h>
  19. #include <random>
  20. #include <ctime>
  21. #include <unordered_map>
  22. #include <unordered_set>
  23.  
  24. #define se second
  25. #define fi first
  26. #define mp make_pair
  27. #define pb push_back
  28.  
  29. typedef long long ll;
  30.  
  31. using namespace std;
  32. /*vector<set<int>> g;
  33. vector<int> used;
  34. vector<int> pre;
  35. int cnt, st, en;
  36. bool f;
  37.  
  38. const ll MOD = (ll)1e9 + 7;
  39.  
  40.  
  41. ll pow(ll a, int n) {
  42.     ll ans = 1;
  43.     while (n) {
  44.         if (n & 1) ans = (ans * a) % MOD;
  45.         a = (a * a) % MOD;
  46.         n >>= 1;
  47.     }
  48.     return ans;
  49. }
  50.  
  51.  
  52. void dfs(int h, int pr) {
  53.     used[h] = 1;
  54.     cnt++;
  55.     for (auto e: g[h]) {
  56.         if ((e == pr) || (used[e] == 2)) continue;
  57.         if (used[e] == 1) {
  58.             if (!f) {
  59.                 en = h;
  60.                 st = e;
  61.                 f = 1;
  62.             }
  63.         } else {
  64.             pre[e] = h;
  65.             dfs(e, h);
  66.         }
  67.     }
  68.     used[h] = 2;
  69. }*/
  70.  
  71. vector<ll> dpl;
  72. vector<ll> dpr;
  73. vector<ll> a;
  74.  
  75.  
  76. long double my_abs(long double q) {
  77.     if (q > 1.0) return q;
  78.     return 0;
  79. }
  80.  
  81.  
  82. bool test(long double n) {
  83.     int l1 = -1;
  84.     int r1 = (int)dpl.size();
  85.     while (r1 - l1 > 1) {
  86.         int m = (r1 + l1) / 2;
  87.         if ((long double)dpl[m] <= my_abs(n - 1)) l1 = m;
  88.         else r1 = m;
  89.     }
  90.     int l2 = -1;
  91.     int r2 = (int)dpr.size();
  92.     while (r2 - l2 > 1) {
  93.         int m = (r2 + l2) / 2;
  94.         if ((long double)dpr[m] > my_abs(n - 1)) l2 = m;
  95.         else r2 = m;
  96.     }
  97.     return ((a[r2] - a[l1]) <= 2 * n);
  98. }
  99.  
  100.  
  101. int main() {
  102.     iostream::sync_with_stdio(false);
  103.     /*int n;
  104.     cin >> n;
  105.     vector<ll> a(n);
  106.     ll mx = 0;
  107.     for (auto e : a) cin >> e;
  108.     sort(a.begin(), a.end());
  109.     for (int i = 0; i < n - 1; i++) {
  110.         mx = max(mx, a[i + 1] - a[i]);
  111.     }*/
  112.     /*int n, k;
  113.     cin >> n >> k;
  114.     g.resize(n);
  115.     int f1 = 1;
  116.     for (int i = 0; i < n; i++) {
  117.         int x;
  118.         cin >> x;
  119.         if (i == x - 1) continue;
  120.         f1 = 0;
  121.         g[x - 1].insert(i);
  122.         g[i].insert(x - 1);
  123.     }
  124.     if (k == 1) {
  125.         cout << f1;
  126.         return 0;
  127.     }
  128.     used.assign(n, 0);
  129.     ll answ = 1;
  130.     pre.assign(n, -1);
  131.     for (int i = 0; i < n; i++) {
  132.         if (!used[i]) {
  133.             dfs(i, -1);
  134.             if (!f) answ = (answ * k * pow((ll)k - 1, cnt - 1)) % MOD;
  135.             else {
  136.                 int ncnt = 1;
  137.                 int cur = en;
  138.                 while (cur != st) {
  139.                     cur = pre[cur];
  140.                     ncnt++;
  141.                 }
  142.                 vector<ll> dp(ncnt + 1, 0);
  143.                 dp[0] = 1;
  144.                 dp[1] = k;
  145.                 //for (int i = 2; i <= ncnt; i++) dp[i] = (dp[i - 2] * (k - 1) + dp[i - 1] * (k - 2)) % MOD;
  146.                 //answ = (answ * dp[ncnt]) % MOD;
  147.                 answ = (answ * (ll)(pow((ll)k - 1, ncnt) + pow(-1, ncnt) * (k - 1))) % MOD;
  148.                 answ = (answ * pow((ll)k - 1, cnt - ncnt)) % MOD;
  149.             }
  150.         }
  151.     }
  152.     cout << answ;*/
  153.     int n;
  154.     cin >> n;
  155.     a.resize(n);
  156.     ll mn = (ll)1e9 + 1;
  157.     ll mx = -1;
  158.     for (auto& e : a) {
  159.         cin >> e;
  160.         mn = min(mn, e);
  161.         mx = max(mx, e);
  162.     }
  163.     ll rst = mx - mn + 1;
  164.     sort(a.begin(), a.end());
  165.     dpl.assign(n, 0);
  166.     dpr.assign(n, 0);
  167.     for (int i = 1; i < n; i++) {
  168.         int l = -1;
  169.         int r = i;
  170.         while (r - l > 2) {
  171.             int f = (l * 2 + r) / 3;
  172.             int s = (l + r * 2) / 3;
  173.             if (max(a[i] - a[f], dpl[f] + 1) >= max(a[i] - a[s], dpl[s] + 1)) l = f;
  174.             else r = s;
  175.         }
  176.         dpl[i] = max(a[i] - a[(l + r) / 2], dpl[(l + r) / 2] + 1);
  177.     }
  178.     for (int i = n - 2; i >= 0; i--) {
  179.         int l = i;
  180.         int r = n;
  181.         while (r - l > 2) {
  182.             int f = (l * 2 + r) / 3;
  183.             int s = (l + r * 2) / 3;
  184.             if (max(a[f] - a[i], dpr[f] + 1) >= max(a[s] - a[i], dpr[s] + 1)) l = f;
  185.             else r = s;
  186.         }
  187.         dpr[i] = max(a[(l + r) / 2] - a[i], dpr[(l + r) / 2] + 1);
  188.     }
  189.     /*for (auto e : dpl) cout << e << ' ';
  190.     cout << '\n';
  191.     for (auto e : dpr) cout << e << ' ';
  192.     cout << '\n';*/
  193.     ll l = -1;
  194.     ll r = rst * 2;
  195.     while (r - l > 1) {
  196.         ll m = (l + r) / 2;
  197.         if (test(m / 2.0)) r = m;
  198.         else l = m;
  199.     }
  200.     if (r % 2) cout << r / 2.0;
  201.     else cout << r / 2 << ".0";
  202.     return 0;
  203. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement