Submission #47288

#TimeUsernameProblemLanguageResultExecution timeMemory
47288TalantGap (APIO16_gap)C++17
43.01 / 100
130 ms7004 KiB
#include <bits/stdc++.h> #include "gap.h" //#include "grader.cpp" using namespace std; const long long M = (1e6 + 5); long long ans = 0; long long a[M]; long long l,r = 1e18; long long ll,rr; set<long long> st; void f (long long mn,long long mx) { if (mn != -1) st.insert(mn); if (mx != -1) st.insert(mx); if (mn >= mx) return; if (mx - mn < 4) { if (mn + 1 <= mx - 1) { long long l = 0,r = 0; MinMax(mn + 1,mx - 1,&l,&r); f(l,r); } return; } long long m = mn + (mx - mn) / 3; long long m1 = mx - (mx - mn) / 3; if (mn + 1 <= m - 1) { long long l = 0,r = 0; MinMax(mn + 1,m - 1,&l,&r); f(l,r); } if (m <= m1) { long long l = 0,r = 0; MinMax(m,m1,&l,&r); f(l,r); } if (m1 + 1 <= mx - 1) { long long l = 0,r = 0; MinMax(m1 + 1,mx - 1,&l,&r); f(l,r); } } long long findGap(int T, int N) { if (T == 1 || N < 5e2) { long long o = (N + 1) / 2; ll = 1,rr = N; while (o --) { MinMax(l,r,&a[ll],&a[rr]); l = a[ll] + 1,r = a[rr] - 1; ll ++,rr --; } for (long long i = 1; i < N; i ++) ans = max(ans,a[i + 1] - a[i]); return ans; } else { long long l = 0,r = 0; MinMax(0,1e18,&l,&r); f(l,r); for (auto to : st) { a[ll] = to; ll ++; } for (long long i = 1; i < N; i ++) ans = max(ans,a[i + 1] - a[i]); return ans; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...