Submission #847561

#TimeUsernameProblemLanguageResultExecution timeMemory
847561MinaRagy06A Difficult(y) Choice (BOI21_books)C++17
60 / 100
2 ms1624 KiB
#include <bits/stdc++.h>
#ifdef MINA
    #include "grader.cpp"
#else
    #ifdef DEBUG
        #include "grader2.cpp"
    #endif
#endif
#include "books.h"
#define ll long long
using namespace std;

ll b[100'005];
ll ask(int i) {
    if (~b[i]) return b[i];
    return b[i] = skim(i + 1);
}
void solve(int n, int k, ll a, int Q) {
    memset(b, -1, sizeof b);
    ll s1 = 0;
    for (int i = 0; i < k - 1; i++) {
        s1 += ask(i);
    }
    int l = 0, r = n - 1;
    while (l <= r) {
        int md = ((l + r) >> 1);
        ll s = ask(md);
        if (s >= a) {
            if (s1 + s <= 2 * a) {
                vector<int> ans;
                for (int j = 0; j < k - 1; j++) {
                    ans.push_back(j + 1);
                }
                ans.push_back(md + 1);
                answer(ans);
            } else {
                r = md - 1;
                continue;
            }
        } else {
            l = md + 1;
        }
    }
    l = 0, r = n - k;
    while (l <= r) {
        int md = ((l + r)) >> 1;
        ll s = 0;
        for (int i = md; i < md + k; i++) {
            s += ask(i);
        }
        if (s < a) {
            l = md + 1;
        } else if (s > 2 * a) {
            r = md - 1;
        } else {
            vector<int> ans;
            for (int j = md; j < md + k; j++) {
                ans.push_back(j + 1);
            }
            answer(ans);
        }
    }
    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...