제출 #1005911

#제출 시각아이디문제언어결과실행 시간메모리
1005911omsincoconutGap (APIO16_gap)C++17
48.70 / 100
38 ms8880 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; } const ll DV = 5; 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, q1 + (q2-q1+1)/DV); for (ll i = 1; i < DV-1; i++) rec(dt, q1 + i*(q2-q1+1)/DV + 1, q1 + (i+1)*(q2-q1+1)/DV); rec(dt, q1 + (DV-1)*(q2-q1+1)/DV + 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 findGap2_(int N) { ll mi, mx; query(LLONG_MIN, LLONG_MAX, mi, mx); ll ans = (mx-mi+N-2)/(N-1); // by pigeonhole ll lst = mi, lft = N; while (lst < mx && lft > 0) { ll q1, q2; query(lst+1, lst+ans, q1, q2); if (q1 == -1) { ll cq1, cq2; query(lst+1, mx-1, cq1, cq2); if (cq1 == -1) { ans = max(ans, mx-lst); lst = mx; lft = 0; } else { ans = max({ans, cq1-lst, mx-cq2}); lst = cq1; mx = cq2; lft -= 2; } } else { lst = q2; lft--; } if (lft > 1) ans = max(ans, (mx-lst+lft-2)/(lft-1)); } return ans; } ll findGap(int T, int N) { if (T == 1) return findGap1(N); if (N <= 8) return findGap1(N); //if (N <= 200) return findGap2_(N); return findGap2_(N); }

컴파일 시 표준 에러 (stderr) 메시지

gap.cpp: In function 'void rec(std::set<long long int>&, ll, ll)':
gap.cpp:41:5: warning: unused variable 'mid' [-Wunused-variable]
   41 |  ll mid = (q1+q2)/2;
      |     ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...