제출 #110696

#제출 시각아이디문제언어결과실행 시간메모리
110696baneling100Gap (APIO16_gap)C++17
100 / 100
89 ms2044 KiB
#include "gap.h"
#include <algorithm>
#define MAX_N 100000
#define MAX_A 1000000000000000000

long long A[MAX_N];

long long findGap(int T, int N) {
    
    long long min, max, ans = 0;
    
    if (T == 1) { // subtask 1
        int t = (N + 1) / 2, low = 0, high = N;
        min = -1, max = MAX_A + 1;
        
        for(int i = 0; i < t; i++) {
            MinMax(min + 1, max - 1, &min, &max);        
            A[low++] = min;
            A[--high] = max;
        }
        
        for(int i = 1; i < N; i++)
            if(ans < A[i] - A[i - 1])
                ans = A[i] - A[i - 1];
    }
    else { // subtask 2
        MinMax(0, MAX_A, &min, &max);
        long long gap = (max - min) / N, x, y, start = min + 1, end;
        int M = 0;
        A[M++] = min;
        while(start < max) {
            x = y = -1;
            end = std::min(start + gap, max - 1);
            MinMax(start, end, &x, &y);
            if(x != -1) {
                A[M++] = x;
                if(x < y) A[M++] = y;
            }
            start = end + 1;
        }
        A[M++] = max;
        for(int i = 1; i < M; i++)
            if(ans < A[i] - A[i - 1])
                ans = A[i] - A[i - 1];
    }
    
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...