제출 #1272594

#제출 시각아이디문제언어결과실행 시간메모리
1272594nerrrminA Difficult(y) Choice (BOI21_books)C++20
60 / 100
2 ms440 KiB
#include <bits/stdc++.h>

#include "books.h"
#define pb push_back
using namespace std;
const int maxn = 2e5 + 10;
//
// --- Sample implementation for the task books ---
//
// To compile this program with the sample grader, place:
//     books.h books_sample.cpp sample_grader.cpp
// in a single folder and run:
//     g++ books_sample.cpp sample_grader.cpp
// in this folder.
//
long long n, k, s;
long long a;
long long x[maxn];
long long do_skim(int pos)
{

    if(!x[pos])x[pos] = skim(pos);
    return x[pos];
}
long long check(int from, int to)
{
    long long sum = 0;
    for (int i = to; i >= from; -- i)
    {
        sum += do_skim(i);
        if(sum >= 2*a)return sum;
    }
    return sum;
}
void solve(int N, int K, long long A, int S)
{

    n = N;
    k = K;
    a = A;

    int l = 1, r = n-k+1, mid, ans = -1;   /// nai golqmoto posledovateno k-1 sys suma < a
    while(l <= r)
    {
        mid = (l + r)/2;
        long long feedback = check(mid, mid+k-1);
        if(feedback < a)
        {
            l = mid + 1;
            ans = mid;
        }
        else if(feedback >= a)
        {
            if(feedback >= a && feedback <= 2*a)
            {
                vector < int > v;
                for (int i = mid; i <= mid+k-1; ++ i)
                    v.pb(i);
                answer(v);
                return;
            }
            r = mid - 1;
        }

    }
    

    vector < int > v;
    long long sum = 0;
    for (int i = 1; i <= k-1; ++ i)
    {
        sum += do_skim(i);
        v.pb(i);
    }
        int lt = k, rt = n, res = -1;
        while(lt <= rt)
        {
            mid = (lt + rt)/2;
            if(do_skim(mid) >= a )
            {
                if(do_skim(mid) + sum >= a && do_skim(mid) + sum <= 2*a)res = mid;
                rt = mid - 1;
            }
            else lt = mid + 1;
        }


       
        if(res == -1)
            impossible();
        else
        {

            v.pb(res);
            answer(v);
        }

    }
#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...