제출 #904198

#제출 시각아이디문제언어결과실행 시간메모리
904198n0sk1llGap (APIO16_gap)C++17
100 / 100
41 ms3024 KiB
    #include <bits/stdc++.h>
     
    #define FAST ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);cerr.tie(0)
    #define mp make_pair
    #define xx first
    #define yy second
    #define pb push_back
    #define pf push_front
    #define popb pop_back
    #define popf pop_front
    #define all(x) x.begin(),x.end()
    #define ff(i,a,b) for (int i = a; i < b; i++)
    #define fff(i,a,b) for (int i = a; i <= b; i++)
    #define bff(i,a,b) for (int i = b-1; i >= a; i--)
    #define bfff(i,a,b) for (int i = b; i >= a; i--)
     
    using namespace std;
    long double typedef ld;
    unsigned int typedef ui;
    long long int typedef li;
    pair<int,int> typedef pii;
    pair<li,li> typedef pli;
    pair<ld,ld> typedef pld;
    vector<vector<int>> typedef graph;
    unsigned long long int typedef ull;
    //const int mod = 998244353;
    const int mod = 1000000007;
     
     
     
     
     
     
     
    //Note to self: Check for overflow
     
    #include "gap.h"
     
    li solve3v(int n)
    {
        li ans=0;
        li l=-1,r=1'000'000'000'000'000'001ll;
        ff(i,0,(n+1)/2)
        {
            li mn,mx;
            MinMax(l+1,r-1,&mn,&mx);
            if (l!=-1) ans=max(ans,max(mn-l,r-mx));
            //cout<<": "<<l<<" "<<mn<<" "<<mx<<" "<<r<<endl;
            l=mn,r=mx;
        }
        return max(ans,r-l);
    }
     
    li solve(int n)
    {
        li l=-1,r=1'000'000'000'000'000'001ll;
        li mn,mx; MinMax(l+1,r+1,&mn,&mx);
        if (n==2) return mx-mn;
        l=mn,r=mx;
     
        li gap=(r-l+n-1)/n,maygap;
        while (true)
        {
            maygap=gap;
            while (true)
            {
                maygap=min(maygap,r-l);
                MinMax(l+1,l+maygap,&mn,&mx);
                if (mx==-1) maygap*=2;
                else
                {
                    gap=max(gap,mn-l);
                    l=mx; break;
                }
            }
            if (l>=r) break;
        }
     
        return gap;
    }
     
    li findGap(int T, int N)
    {
    	if (T==1) return solve3v(N);
    	return solve(N);
    }
     
    /*
     
    2 4
    2 3 6 8
     
    */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...