This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "bits/stdc++.h"
#include "gap.h"
using namespace std;
const long long maxV = 1e18;
long long findGap(int T, int N)
{
long long mx, mn;
MinMax(0, maxV, &mn, &mx);
if(T == 1) {
vector <long long> left, right;
left.push_back(mn); right.push_back(mx);
while(left.size() + right.size() < N) {
long long p, q;
MinMax(mn + 1, mx - 1, &p, &q);
tie(mn, mx) = make_pair(p, q);
left.push_back(mn);
right.push_back(mx);
}
for(auto i : right) left.push_back(i);
sort(left.begin(), left.end());
long long ans = 0;
for(int i = 1; i < left.size(); i++) {
ans = max(ans, left[i] - left[i - 1]);
}
return ans;
}
long long lower = (mx - mn + N - 2) / (N - 1);
long long cur = mn + 1;
vector <long long> v ({mn});
int cnt = N - 1;
while(cur <= mx) {
long long p, q;
MinMax(cur, min(mx, cur + lower), &p, &q);
cur += lower + 1;
if(p != -1) {
if(!v.empty()) {
lower = max(lower, p - v.back());
}
v.push_back(p);
v.push_back(q);
cnt -= (p == q) ? 1 : 2;
} else {
lower = max(lower, min(mx, cur) - v.back());
}
if(cnt) lower = max(lower, (mx - v.back() + cnt - 1) / cnt);
// cout << cur << " " << min(mx, cur + lower - 1) << " " << p << " " << q << endl;
}
return lower;
}
Compilation message (stderr)
gap.cpp: In function 'long long int findGap(int, int)':
gap.cpp:13:42: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
while(left.size() + right.size() < N) {
~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
gap.cpp:23:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i = 1; i < left.size(); i++) {
~~^~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |