Submission #200754

#TimeUsernameProblemLanguageResultExecution timeMemory
200754RakhmandGap (APIO16_gap)C++14
53.46 / 100
201 ms5880 KiB
#include "gap.h"

#include <cstring>
#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <queue>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <cassert>
#include <iterator>

using namespace std;
typedef long long llong;

long long a[100010];
set<llong> st;

void upd(llong l, llong r){
    llong mn = NULL, mx = NULL;
    MinMax(l, r, &mn, &mx);
    if(mn == -1){
        return ;
    }
    st.insert(mn);
    if(mn != mx) st.insert(mx);
    l = mn + 1, r = mx - 1;
    if(l > r) return ;
    llong div = (r - l + 15) / 16;
    for(llong tl = l; tl <= r; tl = tl + div + 1){
        llong tr = min(tl + div, r);
        //cout << tl << ' ' << div << ' ' << tr << endl;
        if(tl > tr) continue;
        upd(tl, tr);
    }
    
}

long long findGap(int T, int N) {
    if(T == 1){
        int L = 1, R = N;
        long long l = 0, r = 1e18;
        while(R >= L){
            long long mn = NULL, mx = NULL;
            //cout << L << ' ' << R << ' ' << l << ' ' << r << endl;
            MinMax(l, r, &mn, &mx);
            //cout << mn << ' ' << mx << endl;
            a[L++] = mn;
            a[R--] = mx;
            l = mn + 1;
            r = mx - 1;
        }
        long long ans = 0;
        for(int i = 1; i < N; i++){
            //std::cout << a[i] << ' ';
            if(a[i + 1] - a[i] > ans){
                ans = a[i + 1] - a[i];
            }
        }
        return ans;
    }else{
        upd(1, (llong) 1e18);
        llong ans = 0;
        llong last = -1;
        for(auto it : st){
            if(last != -1){
                if(it - last > ans){
                    ans = it - last;
                }
            }
            last = it;
        }
        return ans;
    }
}

Compilation message (stderr)

gap.cpp: In function 'void upd(llong, llong)':
gap.cpp:33:16: warning: converting to non-pointer type 'llong {aka long long int}' from NULL [-Wconversion-null]
     llong mn = NULL, mx = NULL;
                ^~~~
gap.cpp:33:27: warning: converting to non-pointer type 'llong {aka long long int}' from NULL [-Wconversion-null]
     llong mn = NULL, mx = NULL;
                           ^~~~
gap.cpp: In function 'long long int findGap(int, int)':
gap.cpp:57:28: warning: converting to non-pointer type 'long long int' from NULL [-Wconversion-null]
             long long mn = NULL, mx = NULL;
                            ^~~~
gap.cpp:57:39: warning: converting to non-pointer type 'long long int' from NULL [-Wconversion-null]
             long long mn = NULL, mx = NULL;
                                       ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...