Submission #1301570

#TimeUsernameProblemLanguageResultExecution timeMemory
1301570efegA Difficult(y) Choice (BOI21_books)C++20
100 / 100
2 ms1180 KiB
#include <bits/stdc++.h>
#include "books.h"
using namespace std;

#define pb push_back
#define all(v) v.begin(),v.end()
using i64 = long long; 
template<typename T>
using vec = vector<T>;


vec<i64> x; 
i64 get(int idx){
    if (x[idx] != -1) return x[idx]; 
    return x[idx] = skim(idx); 
}

void solve(int N, int K, long long A, int S) {
    x.assign(1e5 + 100,-1); 
    i64 sm = 0; 
    vec<int> vecans; 
    for (int i = 1; i <= K; i++){
        sm += get(i);
        vecans.pb(i); 
    } 

    if (sm >= A && sm <= 2*A) {
        answer(vecans); 
    }

    int s = 1,e = N+1; 
    while (e - s > 1){
        int m = (s + e) / 2; 
        if (get(m) > A){
            e = m; 
        } 
        else {
            s = m; 
        }
    }

    if(s != N) {
        i64 t = sm - get(K) + get(s + 1);
        if(t >= A && t <= 2*A) {
            vecans.back() = s+1;
            answer(vecans);
            return;
        }
    }

    if (s < K){
        impossible();
    }


    for (int i = 0; i < K; i++){
        vecans[K - i - 1] = s - i; 
        sm -= get(K - i); 
        sm += get(s - i); 

        if (sm >= A && sm <= 2 * A){
            answer(vecans); 
        }
    }

    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...