제출 #47285

#제출 시각아이디문제언어결과실행 시간메모리
47285TalantGap (APIO16_gap)C++17
43.01 / 100
126 ms6940 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 < 1e3) {
            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...