제출 #729167

#제출 시각아이디문제언어결과실행 시간메모리
729167Jean7A Difficult(y) Choice (BOI21_books)C++14
100 / 100
2 ms416 KiB
#include <bits/stdc++.h>
#include "books.h"
#define mid ((l+r)>>1)

using namespace std ;

const long long N = 1e5+5 ;

long long a[N] ;

void solve(int n, int k, long long A, int s) {
    long long sum = 0 ;
    vector <int> v ;
    for ( long long i = 1 ; i <= k ; i++ ) {
        a[i] = skim(i) ;
        sum += a[i] ;
        v.push_back(i) ;
    }
    if ( sum > 2ll * A ) {
        impossible () ;
    }
    long long id = k , xx = n+1 ;
    while ( sum < A && id > 0 ) {
        long long l = id , r = xx ;
        if ( !a[r-1] ) {
            a[r-1] = skim(r-1) ;
        }
        if ( sum + a[r-1] - a[l] <= 2ll * A ) {
            l = r-1 ;
        }
        while ( r - l > 1 ) {
            if ( !a[mid] ) {
                a[mid] = skim(mid) ;
            }
            if ( sum + a[mid] - a[id] <= 2ll * A ) {
                l = mid ;
            }
            else {
                r = mid ;
            }
        }
        sum -= a[id] ;
        sum += a[l] ;
        v[id-1] = l ;
        xx = l ;
        id-- ;
    }
    if ( sum < A ) {
        impossible () ;
    }
    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...