Submission #1066950

#TimeUsernameProblemLanguageResultExecution timeMemory
1066950vjudge1A Difficult(y) Choice (BOI21_books)C++17
60 / 100
2 ms1116 KiB
//Dost SEFEROĞLU
#include <bits/stdc++.h>
#include "books.h"
using namespace std;
#define int long long
#define pii pair<int,int>
#define ff first
#define ss second
#define sp << " " <<    
#define all(cont) cont.begin(),cont.end()
#define vi vector<int>

using namespace std;

void solve(int32_t N, int32_t K, long long A, int32_t S) {
    int l = 1;  
    int r = N-K+1;
    vi memory(N+1,0);
    while (l<=r) {
        int m = (l+r) >> 1;
        int sm = 0;
        for (int j=m+K-1;j>=m;j--) {
            if (!memory[j]) memory[j] = skim(j);
            if (sm+memory[j]*(j-m+1) < A) break;
            sm+=memory[j];
            if (sm >= A) break;
        }
        if (sm >= A) r = m-1;
        else l = m+1;
    }
    if (l > N-K+1) impossible();
    int sm = 0;
    for (int j=l;j<=l+K-1;j++) {
        if (!memory[j]) memory[j] = skim(j);
        sm+=memory[j];
    }
    if (sm >= A && sm <= 2*A) {
        vector<int32_t> v;
        for (int j=l;j<=l+K-1;j++) v.push_back(j);
        answer(v);
        return;
    }
    sm = memory[l+K-1];
    for (int j=1;j<=K-1;j++) {
        if (!memory[j]) memory[j] = skim(j);
        sm+=memory[j];
    } 
    if (sm <= 2*A) {
        assert(sm >= A);
        vector<int32_t> v;
        for (int j=1;j<=K-1;j++) v.push_back(j);
        v.push_back(l+K-1);
        answer(v);
        return;  
    }
    impossible();
}
#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...