이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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) {
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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |