#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 (ans == -1 || sm + get(ans) > 2 * A) impossible();
vec<int> mn,mx;
int currSum = 0;
for (int i = K; i > 0; i--){
mn.pb(i);
currSum += get(i);
}
for (int i = ans; i >= max(K+1,ans - K + 1); i--){
mx.pb(i);
}
vec<int> added;
while (currSum < A){
currSum -= get(mn.back());
currSum += get(mx.back());
added.pb(mx.back());
mn.pop_back();
mx.pop_back();
if (currSum >= A && currSum <= 2 * A) break;
}
for (auto x : added) mn.pb(x);
answer(mn);
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |