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"
//~ #include "grader.cpp"
using namespace std;
#define ll long long
ll ans;
ll mn, mx;
void solve(ll l, ll r){
if(ans > r - l + 2) return;
if(l == r) return;
ll d = r - l;
vector <ll> s;
for(int i = 0 ; i < 10 ; i++){
s.push_back(l + d / 10 * i);
}
s.push_back(r);
s.resize(unique(s.begin(), s.end()) - s.begin());
int sz = (int)s.size() - 1;
vector <ll> mnq, mxq;
for(int i = 0 ; i < sz ; i++){
MinMax(s[i], s[i + 1], &mn, &mx);
if(mn != -1){
mnq.push_back(mn);
mxq.push_back(mx);
}
}
if(mnq.size()){
ans = max(ans, mnq[0] - (l - 1));
ans = max(ans, r + 1 - mxq.back());
}
else ans = max(ans, r + 1 - (l - 1));
for(int i = 0 ; i + 1 < (int)mnq.size() ; i++){
ans = max(ans, mnq[i + 1] - mxq[i]);
}
for(int i = 0 ; i < (int)mnq.size() ; i++){
solve(mnq[i] + 1, mxq[i] - 1);
}
}
ll findGap(int T, int N){
if(T == 1){
MinMax(0, 1e18, &mn, &mx);
ll ans = 0;
while(mn + 1 < mx){
ll new_mn, new_mx;
MinMax(mn + 1, mx - 1, &new_mn, &new_mx);
if(new_mn == -1){
ans = max(ans, mx - mn);
}
ans = max(ans, new_mn - mn);
ans = max(ans, new_mx - mx);
mn = new_mn;
mx = new_mx;
}
if(mn != mx) ans = max(ans, mx - mn);
return ans;
}
MinMax(0, 1e18, &mn, &mx);
solve(mn + 1, mx - 1);
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |