Submission #1361914

#TimeUsernameProblemLanguageResultExecution timeMemory
1361914mariaclaraA Difficult(y) Choice (BOI21_books)C++20
0 / 100
0 ms424 KiB
#include <bits/stdc++.h>
#include "books.h"

using namespace std;

typedef long long ll;
typedef pair<ll,int> pii;
typedef vector<int> vi;
const int MAXN = 1e5+5;
#define all(x) x.begin(), x.end()
#define sz(x) (int)x.size()
#define mk make_pair 
#define pb push_back
#define fr first 
#define sc second

int val[MAXN];

int query(int x) {
    if(val[x] == 0) return val[x] = skim(x);
    return val[x];
}

int search(int N, ll A) {
    int l = 1, r = N+1;

    while(l < r) {
        int mid = (l+r)/2;

        if(query(mid) >= A) r = mid;
        else l = mid+1;
    }

    return l;
}

void solve(int N, int K, ll A, int S) {
    vi v;
    ll sum = 0;

    for(int i = 1; i <= K; i++)
        sum += query(i), v.pb(i);

    if(sum > 2*A) impossible();
    if(sum >= A) answer(v);

    int m = search(N, A);

    if(m != N+1 and sum - query(K) + query(m) <= 2*A) {
        v.pop_back();
        v.pb(m);
        answer(v);
    }

    for(int i = max(K+1, m-K); i < m; i++) {
        sum -= query(v[0]);
        sum += query(i);
        v.erase(v.begin());
        v.pb(i);

        if(A <= sum and sum <= 2*A) answer(v);
    }

    impossible();
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...