제출 #1005861

#제출 시각아이디문제언어결과실행 시간메모리
1005861omsincoconutGap (APIO16_gap)C++17
42.89 / 100
62 ms14032 KiB
#include <bits/stdc++.h> #include "gap.h" using namespace std; typedef long long ll; ll findGap1(int N) { ll l = 1, r = N; ll fl = LLONG_MIN, fr = LLONG_MAX; ll arr[N+1]; while (l <= r) { ll *q1 = new ll(0), *q2 = new ll(0); MinMax(fl, fr, q1, q2); arr[l++] = *q1; arr[r--] = *q2; fl = *q1+1; fr = *q2-1; } ll ans = 0; for (ll i = 1; i < N; i++) ans = max(ans, arr[i+1] - arr[i]); return ans; } void query(ll s, ll t, ll &q1, ll &q2) { ll *qr1 = new ll(0), *qr2 = new ll(0); MinMax(s, t, qr1, qr2); q1 = *qr1; q2 = *qr2; } void rec(set<ll> &dt, ll l, ll r) { if (l > r) return; ll q1, q2; query(l, r, q1, q2); if (q1 == -1) return; dt.insert(q1); dt.insert(q2); ll mid = (q1+q2)/2; rec(dt, q1+1, mid); rec(dt, mid+1, q2-1); } ll findGap2(int N) { set<ll> dt; rec(dt, -2e18, 2e18); vector<ll> arr; for (ll i : dt) arr.push_back(i); ll ans = 0; for (ll i = 0; i < N-1; i++) ans = max(ans, arr[i+1] - arr[i]); return ans; } ll findGap(int T, int N) { return T == 1 ? findGap1(N) : findGap2(N); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...