#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 >= ans-K+1; i--){
mx.pb(i);
}
while (!mx.empty()){
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 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... |