Submission #40794

#TimeUsernameProblemLanguageResultExecution timeMemory
40794ssnsarang2023Gap (APIO16_gap)C++14
30 / 100
79 ms2156 KiB
#include <bits/stdc++.h> #include "gap.h" using namespace std; typedef long long ll; //#define DEBUG #ifdef DEBUG int n = 2; ll a[2] = {78103569500113815, 605712887753065418 }; void MinMax(ll x, ll y, ll *mn, ll *mx) { for (int i = 0; i < n; ++i) if (a[i] >= x) { (*mn) = a[i]; break; } for (int i = n - 1; i >= 0; --i) if (a[i] <= y) { (*mx) = a[i]; break; } if ((*mx) < (*mn)) (*mx) = (*mn) = -1; } #endif ll findGap(int _t, int _n) { ll n = _n; ll mn = 1, mx = (ll)1e18; MinMax(mn, mx, &mn, &mx); if (_t == 2) { ll d = ceil((long double)(mx - mn) / (long double)(n - 1ll)), pre = mn, gap = 0; for (ll i = mn; i < mx; i += d) { ll mntmp = -1, mxtmp = -1; MinMax(i, i + d - 1, &mntmp, &mxtmp); if (mn == -1) continue; gap = max(gap, mntmp - pre); pre = mxtmp; } gap = max(gap, mx - pre); return gap; } else { vector<ll> a; a.resize(n); a[0] = mn, a[n - 1] = mx; int lo = 0, hi = n - 1; while (hi - lo > 1) { MinMax(a[lo] + 1ll, a[hi] - 1ll, &mn, &mx); ++lo, --hi; a[lo] = mn, a[hi] = mx; } ll gap = 0; for (int i = 0; i < n - 1; ++i) gap = max(gap, a[i + 1] - a[i]); return gap; } return 0ll; } #ifdef DEBUG int main() { printf("%d", findGap(1, 5)); return 0; } #endif
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...