Submission #1301543

#TimeUsernameProblemLanguageResultExecution timeMemory
1301543efegA Difficult(y) Choice (BOI21_books)C++20
0 / 100
2 ms1184 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(1e5 + 100,-1); 
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) {
    i64 sm = 0; 
    for (int i = 1; i < K; i++) sm += get(i);
    
    int s = K,e = N,ans = -1; 
    while (s <= e){
        int m = (s + e) / 2; 
        if (get(m) > A){
            ans = m; 
            e = m-1; 
        } 
        else {
            ans = m; 
            s = m+1; 
        }
    }
    
    if (sm + get(ans) > 2 * A || sm + get(ans) < A) impossible(); 
    
    vec<int> ansvec(K); 
    i64 curr = 0;
    deque<int> dq;   
    for (int i = 1; i <= K; i++){
        curr += get(i); 
        dq.push_back(i); 
    } 

    vec<int> mx; 
    for (int i = ans; i >= max(K+1,ans-K+1); i--){
        mx.pb(i); 
    }

    while (curr < A){
        curr -= get(dq.front()); 
        dq.pop_front(); 
        curr += get(mx.back()); 
        dq.pb(mx.back()); 
        mx.pop_back(); 
        if (curr >= A && curr <= 2 * A) break; 
    }

    vec<int> vecans; 
    for (auto x : dq) vecans.pb(x);  
    answer(vecans); 
}
#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...