This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "books.h"
#include <bits/stdc++.h>
#ifndef EVAL
#include "grader.cpp"
#endif
using namespace std;
#define int long long
#define i32 int32_t
#define pb push_back
#define ff first
#define ss second
template<class T> bool umin(T& a, const T b) { if(a > b) { a = b; return 1; } return 0; }
template<class T> bool umax(T& a, const T b) { if(a < b) { a = b; return 1; } return 0; }
const int M = 2e5+5;
const long long inf = 1e18;
int a[M], pref[M];
void solve(i32 n, i32 k, int A, i32 s) {
if(s < n) { impossible(); return; }
for(i32 i=1;i<=n;i++) a[i] = skim(i);
for(int i=1;i<=n;i++) pref[i] = pref[i-1] + a[i];
int res = inf, l = -1, r = -1;
for(int i=k;i<=n;i++){
if(pref[i] - pref[i-k] >= A && umin(res, pref[i] - pref[i-k])) l = i-k+1, r = i;
} if(l == -1) { impossible(); return; }
set<pair<int, int>> ss;
for(int i=l;i<=r;i++) ss.insert({a[i], i});
for(int i=l-1;i>=0;i--){
if(res <= 2*A) continue;
int bad = -1;
for(auto x : ss){
if(res - x.ff + a[i] < A) break;
bad = i;
} if(~bad) ss.erase({a[bad], bad}), ss.insert({a[i], i}), res = res - a[bad] + a[i];
} if(res >= A && res <= 2*A){
vector<i32> rr;
for(auto x : ss) rr.pb(x.ss);
answer(rr);
} else impossible();
return;
}
/*
4 2 10 5
5 10 17 25
*/
# | 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... |