제출 #47278

#제출 시각아이디문제언어결과실행 시간메모리
47278TalantGap (APIO16_gap)C++17
30 / 100
71 ms6908 KiB
#include <bits/stdc++.h>

#include "gap.h"
//#include "grader.cpp"

using namespace std;

const int M = (1e6 + 5);

long long ans = 0;
long long a[M];
long long l,r = 1e18;
int ll,rr;
set<long long> st;

void f (int mn,int mx) {
      if (mn != -1)
            st.insert(mn);
      if (mx != -1)
            st.insert(mx);
      if (mn == mx)
            return;

      int m = (mn + mx) >> 1;

      if (mn + 1 <= m) {
            long long l = 0,r = 0;
            MinMax(mn + 1,m,&l,&r);
            f(l,r);
      }
      if (m + 1 <= mx - 1) {
            long long l = 0,r = 0;
            MinMax(m + 1,mx - 1,&l,&r);
            f(l,r);
      }
}
long long findGap(int T, int N)
{
      if (T == 1) {
            int 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 (int 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 (int 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...