Submission #1015218

#TimeUsernameProblemLanguageResultExecution timeMemory
1015218vjudge1Gap (APIO16_gap)C++17
68.05 / 100
45 ms6984 KiB
#include <bits/stdc++.h>
// #include "grader.cpp"
#include "gap.h"

using namespace std;

typedef long long ll;
ll n;
set<ll> st;
void recur(ll l, ll r){
    if (r < l or st.size() == n) return ;
    if (r - l <= 1){
        MinMax(l, r, &l, &r);
        if (l != -1){
            st.insert(l);
            st.insert(r);
        }
        return ;
    }

    ll mid = (l + r) / 2;
    
    ll mn, mx;
    MinMax(l, mid, &mn, &mx);

    if (mn != -1){
        st.insert(mn);
        st.insert(mx);
        recur(mn + 1, mx - 1);
    }

    MinMax(mid + 1, r, &mn, &mx);
    if (mn != -1){
        st.insert(mn);
        st.insert(mx);
        recur(mn + 1, mx - 1);
    }
}

ll findGap(int T, int N){
    n = N;
    ll res;
    if (T == 1 or N <= 8){
        ll mn = 0, mx = 1e18;
        while (N > 0){
            N -= 2;

            MinMax(mn, mx, &mn, &mx);

            st.insert(mn);
            st.insert(mx);
            
            mn++;
            mx--;
        }

        vector<ll> vec;
        for (ll x : st)
            vec.push_back(x);

        ll res = 0;
        for (ll i = 1; i < vec.size(); i ++)
            res = max(res, vec[i] - vec[i - 1]);
        return res;
    }
    else if (N <= 100){
        recur(0, 1e18);
        vector<ll> vec;
        for (ll x : st)
            vec.push_back(x);

        ll res = 0;
        for (ll i = 1; i < vec.size(); i ++)
            res = max(res, vec[i] - vec[i - 1]);
        return res;
    }
    else{
        ll l = 0, r = 1e18;
        ll mn, mx;
        MinMax(l, r, &mn, &mx);

        ll first = mn, last = mx;

        ll ans = 1;
        ll actual = 1;
        l = mn + 1;

        while (l <= last){
            r = l + ans;
            MinMax(l, r, &mn, &mx);

            if (mn == -1)
                ans *= 2;
            else{
                actual = max(actual, mn - (l - 1));
                ans = actual;
                l = mx + 1;
            }
        }

        return actual;
    }
}

Compilation message (stderr)

gap.cpp: In function 'void recur(ll, ll)':
gap.cpp:11:28: warning: comparison of integer expressions of different signedness: 'std::set<long long int>::size_type' {aka 'long unsigned int'} and 'll' {aka 'long long int'} [-Wsign-compare]
   11 |     if (r < l or st.size() == n) return ;
      |                  ~~~~~~~~~~^~~~
gap.cpp: In function 'll findGap(int, int)':
gap.cpp:62:26: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |         for (ll i = 1; i < vec.size(); i ++)
      |                        ~~^~~~~~~~~~~~
gap.cpp:73:26: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   73 |         for (ll i = 1; i < vec.size(); i ++)
      |                        ~~^~~~~~~~~~~~
gap.cpp:82:12: warning: unused variable 'first' [-Wunused-variable]
   82 |         ll first = mn, last = mx;
      |            ^~~~~
gap.cpp:42:8: warning: unused variable 'res' [-Wunused-variable]
   42 |     ll res;
      |        ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...