Submission #810690

#TimeUsernameProblemLanguageResultExecution timeMemory
810690MyCodeA Difficult(y) Choice (BOI21_books)C++17
20 / 100
212 ms1064 KiB
#include <bits/stdc++.h>

#include "books.h"

using namespace std;

void solve(int n, int k, long long A, int S) {
    long long a[n + 1];
    for (int i = 1; i <= n; i++)
        a[i] = skim(i);
    long long pref[n + 1];
    pref[0] = 0;
    for (int i = 1; i <= n; i++)
        pref[i] = a[i] + pref[i - 1];
    function<long long(int, int)> sum = [&](int l, int r) {
        return pref[r] - pref[l - 1];
    };
    for (int i = 1; i <= n; i++) {
        if (sum(i, i + k - 1) >= A && sum(i, i + k - 1) <= 2 * A) {
            vector<int> ans;
            for (int j = i; j < i + k; j++)
                ans.emplace_back(j);
            answer(ans);
            return;
        }
    };
    long long s[n + 1];
    for (int i = 1; i + k - 2 <= n; i++)
        s[i] = sum(i, i + k - 2);
    for (int i = k; i <= n; i++) {
        int l = 1, r = i - k + 1;
        while (r - l > 1) {
            int m = (l + r) >> 1;
            if (s[m] + a[i] >= A)
                r = m;
            else
                l = m;
        }
        int ind = -1;
        if (s[l] + a[i] >= A)ind = l;
        else if (s[r] + a[i] >= A)ind = r;
        if (ind != -1 && s[ind] + a[i] <= 2 * A) {
            vector<int> ans;
            for (int j = ind; j < ind + k - 1; j++)
                ans.emplace_back(j);
            ans.emplace_back(i);
            answer(ans);
            return;
        }
    }
    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...