Submission #992181

#TimeUsernameProblemLanguageResultExecution timeMemory
99218112345678A Difficult(y) Choice (BOI21_books)C++17
25 / 100
3095 ms600 KiB
#include <bits/stdc++.h>
#include "books.h"

using namespace std;

const int nx=1e5+5;

long long n, k, a[nx], t;

long long query(int idx)
{
    if (!a[idx]) a[idx]=skim(idx);
    return a[idx];
}

void solve(int N, int K, long long A, int S) {
    n=N, k=K, t=A;
    int l=k-1, r=n-1;
    //for (int i=1; i<=n;i ++) query(i);
    while (l<=r)
    {
        long long md=(l+r)/2, sm=0;
        for (int j=0; j<k-1; j++) sm+=query(md-j);
        //cout<<"debug "<<l<<' '<<r<<' '<<sm<<' '<<sm+query(md+1)<<' '<<sm+query(n)<<'\n';
        if (sm+query(md+1)>2*t) r=md-1;
        else if (sm+query(n)<t) l=md+1;
        else
        {
            //cout<<"answer "<<md<<' '<<sm<<'\n';
            long long l1=md+1, r1=n;
            while (l1<=r1)
            {
                long long md1=(l1+r1)/2;
                if (sm+query(md1)<t) l1=md1+1;
                else if (sm+query(md1)>2*t) r1=md1-1;
                else
                {
                    vector<int> res;
                    for (int j=0; j<k-1; j++) res.push_back(md-j);
                    res.push_back(md1);
                    answer(res);
                }
            }
        }
    }
    impossible();
}

/*
5 3 10 179
1 2 9 10 100
*/
#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...