Submission #1324049

#TimeUsernameProblemLanguageResultExecution timeMemory
1324049sh_qaxxorov_571Gap (APIO16_gap)C++20
100 / 100
47 ms1880 KiB
#include "gap.h"
#include <algorithm>
#include <vector>

using namespace std;

typedef long long ll;

ll findGap(int T, int N) {
    if (T == 1) {
        // 1-Subtask: Har safar chetki elementlarni topib, oraliqni toraytiramiz
        ll mn_val, mx_val;
        ll l = 0, r = 1e18;
        vector<ll> a(N);
        int i = 0, j = N - 1;

        while (i <= j) {
            MinMax(l, r, &mn_val, &mx_val);
            a[i++] = mn_val;
            a[j--] = mx_val;
            l = mn_val + 1;
            r = mx_val - 1;
        }

        ll max_diff = 0;
        for (int k = 0; k < N - 1; k++) {
            max_diff = max(max_diff, a[k+1] - a[k]);
        }
        return max_diff;
    } else {
        // 2-Subtask: Oraliqni teng bo'laklarga bo'lib, maksimal farqni qidiramiz
        ll mn_all, mx_all;
        MinMax(0, 1e18, &mn_all, &mx_all);
        
        ll L = mn_all, R = mx_all;
        // Kamida (R-L)/(N-1) masofa bo'lishi aniq
        ll block_size = (R - L + N - 2) / (N - 1); 
        ll max_diff = block_size;
        ll last_val = mn_all;

        for (ll i = L + 1; i < R; i += block_size + 1) {
            ll cur_mn, cur_mx;
            // Har bir blokdan faqat min va max ni olamiz
            MinMax(i, min(i + block_size, R - 1), &cur_mn, &cur_mx);
            
            if (cur_mn != -1) {
                max_diff = max(max_diff, cur_mn - last_val);
                last_val = cur_mx;
            }
        }
        max_diff = max(max_diff, R - last_val);
        return max_diff;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...