Submission #992262

#TimeUsernameProblemLanguageResultExecution timeMemory
99226212345678A Difficult(y) Choice (BOI21_books)C++17
25 / 100
2 ms472 KiB
#include <bits/stdc++.h> #include "books.h" using namespace std; const int nx=1e5+5; long long n, k, a[nx], t; long long query(int idx) { if (!a[idx]) a[idx]=skim(idx); return a[idx]; } void solve(int N, int K, long long A, int S) { n=N, k=K, t=A; long long l=k-1, r=N-1; while (l<=r) { long long md=(l+r)/2, sm=0; for (int j=0; j<k-1; j++) sm+=query(md-j); if (sm+query(md+1)>2*t) r=md-1; else if (sm+query(n)<t) l=md+1; else { if (sm+query(md+1)>=t) { vector<int> res; for (int j=0; j<k-1; j++) res.push_back(md-j); res.push_back(md+1); answer(res); } long long l1=md+2, r1=n; while (l1<r1) { long long md1=(l1+r1)/2; if (sm+query(md1)>=t) r1=md1; else l1=md1+1; } if (sm+query(l1)<=2*t) { vector<int> res; for (int j=0; j<k-1; j++) res.push_back(md-j); res.push_back(l1); answer(res); return; } long long tmp=0; for (int i=1; i<k; i++) tmp+=query(i); if (tmp+query(l1)<=2*t) { vector<int> res; for (int i=1; i<k; i++) res.push_back(i); res.push_back(l1); answer(res); return; } else { r=md-1; n=l1-1; } } } impossible(); } /* 5 3 10 179 1 2 9 10 100 */
#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...