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 m = 0;
while ( m + 1 <= n && dif( m + 1 ) < a )
m++;
if ( m != n ) {
long long s = d[m + 1];
vector<int> ans;
ans.push_back( m + 1 );
for ( int i = 1; i < k; i++ ) {
s += d[i];
ans.push_back( i );
}
if ( s <= 2 * a ) {
answer( ans );
return;
}
}
if ( m == 0 ) {
impossible();
return;
}*/
int l = 0, r = n - 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();
else {
long long s = 0;
vector<int> ans;
for ( int i = l; i < l + k; i++ ) {
s += dif( i );
ans.push_back( i );
}
if ( s >= a )
answer( ans );
else
impossible();
}
/*for ( int i = 1; i <= m - k + 1; i++ ) {
long long s = 0;
vector<int> ans;
for ( int j = i; j < i + k; j++ ) {
s += d[j];
ans.push_back( j );
}
if ( a <= s && s <= 2 * a ) {
answer( ans );
return;
}
int l = i, r = m + 1;
while ( r - l > 1 ) {
}
}*/
}
# | 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... |