Submission #918306

#TimeUsernameProblemLanguageResultExecution timeMemory
918306aykhnA Difficult(y) Choice (BOI21_books)C++17
0 / 100
1 ms344 KiB
#include <bits/stdc++.h>
#include "books.h"
using namespace std;
const int MXN = 1e5 + 5;

int a[MXN];

int val(int i)
{
    return !a[i] ? a[i] = skim(i) : a[i];
}

void solve(int N, int K, long long A, int S) 
{
    if (K > N)
    {
        impossible();
        return;
    }
    int l = 1, r = N + 1;
    while (l < r)
    {
        int mid = (l + r) >> 1;
        if (val(mid) >= A) r = mid;
        else l = mid + 1;
    }
    if (l < K)
    {
        impossible();
        return;
    }
    if (l < N + 1)
    {
        int res = 0;
        for (int i = 1; i < K; i++)
        {
            res += val(i);
        }
        res += val(l);
        if (A <= res && res <= 2*A)
        {
            vector<int> v(K - 1);
            iota(v.begin(), v.end(), 1);
            v.push_back(l);
            answer(v);
            return;
        }
    }
    int m = l - 1;
    set<int> s;
    // min sub
    for (int i = 1; i <= K; i++) s.insert(i);
    // max sub
    for (int i = m - K + 1; i <= m; i++) s.insert(i);
    vector<int> arr;
    for (int x : s) arr.push_back(x);
    int res = 0;
    for (int i = 0; i < K; i++) res += val(arr[i]);
    for (int i = 0; i + K <= arr.size(); i++)
    {
        if (res >= A)
        {
            vector<int> v;
            for (int j = i; j < i + K; j++) v.push_back(arr[j]);
            answer(v);
            return;
        }
        if (i + K == arr.size()) break;
        res -= val(arr[i]);
        res += val(arr[i + K]);
    }
    impossible();
}

Compilation message (stderr)

books.cpp: In function 'void solve(int, int, long long int, int)':
books.cpp:59:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |     for (int i = 0; i + K <= arr.size(); i++)
      |                     ~~~~~~^~~~~~~~~~~~~
books.cpp:68:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   68 |         if (i + K == arr.size()) break;
      |             ~~~~~~^~~~~~~~~~~~~
#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...