Submission #1301449

#TimeUsernameProblemLanguageResultExecution timeMemory
1301449efegA Difficult(y) Choice (BOI21_books)C++20
60 / 100
2 ms1192 KiB
#include <bits/stdc++.h>
#include "books.h"
using namespace std;

#define pb push_back; 
#define all(v) v.begin(),v.end()
using i64 = long long; 
template<typename T>
using vec = vector<T>;


vec<i64> x(1e5 + 100,-1); 
i64 get(int idx){
    if (x[idx] != -1) return x[idx]; 
    return x[idx] = skim(idx); 
}

void solve(int N, int K, long long A, int S) {
    vec<int> ansvec(K); 
    i64 sm = 0; 
    for (int i = 1; i < K; i++){
        sm += get(i); 
        ansvec[i-1] = i; 
    }   

    int s = K,e = N; 
    while (s <= e){
        int m = (s + e) / 2; 
        if (sm + get(m) > 2 * A) e = m-1; 
        else if (sm + get(m) < A) s = m+1; 
        else {
            ansvec[K-1] = m; 
            answer(ansvec); 
        }
    }

    s = 1,e = N - K + 1; 
    while (s <= e){
        int m = (s+e) / 2; 
        i64 curr = 0; 
        for (int i = m; i < m + K; i++) curr += get(i); 
        if (curr > 2 * A) e = m-1; 
        else if (curr < A) s = m+1; 
        else {
            iota(all(ansvec),m); 
            answer(ansvec); 
        }
    }

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