# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1207098 | jasonic | Gap (APIO16_gap) | C++20 | 0 ms | 0 KiB |
#include "gap.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define fastIO cin.tie(0); ios::sync_with_stdio(false)
const ll MINN = 0;
const ll MAXN = 1e18;
ll solve1(int N) {
ll mn = MINN, mx = MAXN;
queue<ll> left;
stack<ll> right;
while(true) {
ll l, r;
MinMax(mn, mx, &l, &r);
if(l == r) {
left.push(l);
} else {
left.push(l);
right.push(r);
}
mn = l + 1;
mx = r - 1;
if(left.size() + right.size() == N) break;
}
vector<ll> a;
while(!left.empty()) {
a.push_back(left.front());
left.pop();
}
while(!right.empty()) {
a.push_back(right.top());
right.pop();
}
ll ans = 0;
for(int i = 1; i < N; i++) {
ans = max(ans, a[i] - a[i-1]);
}
return ans;
}
ll solve2(int N) {
ll rangeL, rangeR;
MinMax(0, MAXN, &rangeL, &rangeR);
ll step = ( (rangeR - rangeL + 1) - N - 1) / (N - 1);
ll ans = step, x = -1, y, l = rangeL, i;
for(i = mn, i < rangeR; i += step + 1) {
MinMax(i, min(i + step, rangeR), &x, &y);
if(x != -1) {
ans = max(ans, l - x);
l = y;
}
}
return ans;
}
ll findGap(int T, int N) {
if(T == 1) {
return solve1(N);
} else if(T == 2) {
return solve2(N);
}
}