Submission #992255

#TimeUsernameProblemLanguageResultExecution timeMemory
99225512345678A Difficult(y) Choice (BOI21_books)C++17
25 / 100
2 ms704 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;
    long long l=k-1, r=N-1;
    while (l<=r)
    {
        long long md=(l+r)/2, sm=0;
        for (int j=0; j<k-1; j++) sm+=query(md-j);
        if (sm+query(md+1)>2*t) r=md-1;
        else if (sm+query(n)<t) l=md+1;
        else
        {
            long long l1=md+1, r1=n;
            while (l1<r1)
            {
                long long md1=(l1+r1)/2;
                if (sm+query(md1)>=t) r1=md1;
                else l1=md1+1;
            }
            if (sm+query(l1)<=2*t)
            {
                vector<int> res;
                for (int j=0; j<k-1; j++) res.push_back(md-j);
                res.push_back(l1);
                answer(res);
                return;
            }
            long long tmp=0;
            for (int i=1; i<k; i++) tmp+=query(i);
            if (tmp<=2*t)
            {
                vector<int> res;
                for (int j=1; j<k; j++) res.push_back(j);
                res.push_back(l1);
                answer(res);
                return;
            }
            else
            {
                r=l1-1;
                n=l1-1;
            }
        }
    }
    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...