Submission #773416

#TimeUsernameProblemLanguageResultExecution timeMemory
773416ZHIRDILBILDIZA Difficult(y) Choice (BOI21_books)C++14
0 / 100
1 ms1744 KiB
#include<bits/stdc++.h> #include"books.h" #define ll long long #define fi first #define se second using namespace std ; //void impossible() //{ // cout << "-1\n" ; // exit(0) ; //} //void answer(vector<int> ans) //{ // for(int i : ans) // cout << i << ' ' ; // exit(0) ; //} //ll skim(int ind) //{ // int num ; // cout << "? " << ind << '\n' ; // cin >> num ; // return num ; //} void solve(int n, int k, ll a, int s) { vector<int> ans ; ll x[n + 1] = {}, pref[n + 1] = {} ; for(int i = 1 ; i <= k ; i++) { x[i] = skim(i) ; pref[i] = pref[i - 1] + x[i] ; } if(pref[k] > 2ll * a) impossible() ; if(a <= pref[k] && pref[k] <= 2ll * a) { for(int i = 1 ; i <= k ; i++) ans.push_back(i) ; answer(ans) ; } ll l = 0, r = n + 1 ; while(l + 1 < r) { ll mid = (l + r) >> 1ll, num = x[mid] ; if(!num) { num = skim(mid) ; x[mid] = num ; } if(num < a)l = mid ; else r = mid ; } if(r != n + 1 && x[r] + pref[k - 1] <= 2ll * a) { for(int i = 1 ; i < k ; i++) ans.push_back(i) ; ans.push_back(r) ; answer(ans) ; } // if(s >= 170) // { // l = 0, r = n - k + 2 ; // vector<pair<ll, int>> w, ls ; // while(l + 1 < r) // { // w.clear() ; // ll mid = (l + r) >> 1ll, sum = 0 ; // for(int i = mid ; i < mid + k ; i++) // { // ll num = x[i] ; // if(!num) // { // num = skim(i) ; // x[i] = num ; // } // sum += num ; // w.push_back({num, i}) ; // } // if(sum > 2ll * a)r = mid ; // else // { // ls = w ; // ans.clear() ; // for(auto i : w) // ans.push_back(i.se) ; // if(sum >= a)answer(ans) ; // l = mid ; // } // } // impossible() ; // } // else // { deque<int> d ; ll sum = 0 ; for(int i = 1 ; i <= k ; i++) { sum += x[i] ; d.push_back(i) ; } for(int j = r ; j >= r - k + 1 ; j--) if(!x[j])x[j] = skim(j) ; for(int j = r - k + 1 ; j <= r ; j++) { sum -= x[j - r + k] ; sum += x[j] ; d.pop_front() ; d.push_back(j) ; if(a <= sum && sum <= 2ll * a) { for(int i : d) ans.push_back(i) ; answer(ans) ; } } impossible() ; // } } //signed main() //{ // int n, k, a, s ; // cin >> n >> k >> a >> s ; // solve(n, k, a, s) ; // return 0 ; //}
#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...