This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#include "books.h"
using namespace std;
const int MAX_N = 1e5;
long long d[MAX_N + 1];
long long dif( int i ) {
if ( d[i] == 0 )
d[i] = skim( i );
return d[i];
}
void solve( int n, int k, long long a, int q ) {
int l, r;
l = 0, r = n + 1;
while ( r - l > 1 ) {
int mid = (l + r) / 2;
if ( dif( mid ) >= a )
r = mid;
else
l = mid;
}
int m = l;
if ( m != n ) {
long long s = dif( m + 1 );
vector<int> ans;
ans.push_back( m + 1 );
for ( int i = 1; i < k; i++ ) {
s += dif( i );
ans.push_back( i );
}
if ( s <= 2 * a ) {
answer( ans );
return;
}
}
if ( m == 0 ) {
impossible();
return;
}
l = 0, r = m - k + 2;
while ( r - l > 1 ) {
int mid = (l + r) / 2;
long long s = 0;
vector<int> ans;
for ( int i = mid; i < mid + k; i++ ) {
s += dif( i );
ans.push_back( i );
}
if ( s > 2 * a )
r = mid;
else
l = mid;
}
if ( l == 0 ) {
impossible();
return;
}
long long s = 0;
vector<int> ans;
for ( int i = l; i < l + k; i++ ) {
s += dif( i );
ans.push_back( i );
}
int i = l + k - 1;
while ( i + 1 <= m && s < a ) {
i++;
s += dif( i ) - dif( i - k );
ans[0] = i;
}
if ( s >= a )
answer( ans );
else
impossible();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |