Submission #939533

#TimeUsernameProblemLanguageResultExecution timeMemory
939533LucaIlieA Difficult(y) Choice (BOI21_books)C++17
60 / 100
1 ms848 KiB
#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 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...