Submission #939531

#TimeUsernameProblemLanguageResultExecution timeMemory
939531LucaIlieA Difficult(y) Choice (BOI21_books)C++17
10 / 100
1 ms700 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 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 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...