Submission #1195589

#TimeUsernameProblemLanguageResultExecution timeMemory
1195589anmattroiA Difficult(y) Choice (BOI21_books)C++17
25 / 100
0 ms452 KiB
#include "books.h"
#include <bits/stdc++.h>

using namespace std;


int64_t cached[100005];

long long get(int x) {
    return cached[x] ? cached[x] : cached[x] = skim(x);
}

void solve(int N, int K, long long A, int S) {
    int64_t SUM = 0;
    for (int i = 1; i < K; i++) SUM += get(i);
    int lo = K-1, hi = N;
    while (hi - lo > 1) {
        int mid = (lo + hi) >> 1;
        int64_t T = SUM + get(mid);
        if (A <= T && T <= 2*A) {
            vector<int> ans;
            for (int i = 1; i < K; i++) ans.emplace_back(i);
            ans.emplace_back(mid);
            answer(ans);
            return;
        }
        if (mid == K && T > 2*A) {
            impossible();
            return;
        }
        if (T >= A) hi = mid;
        else lo = mid;
    }
    int pivot = hi;
    lo = K-2; hi = pivot;
    while (hi - lo > 1) {
        int mid = (lo + hi) >> 1;
        int64_t T = get(pivot);
        for (int i = mid-K+2; i <= mid; i++) T += get(i);
        if (A <= T && T <= 2*A) {
            vector<int> ans;
            for (int i = mid-K+2; i <= mid; i++) ans.emplace_back(i);
            ans.emplace_back(pivot);
            answer(ans);
            return;
        }
        if (T >= A) hi = mid;
        else lo = mid;
    }
    impossible();
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...