Submission #992241

#TimeUsernameProblemLanguageResultExecution timeMemory
99224112345678A Difficult(y) Choice (BOI21_books)C++17
30 / 100
2 ms600 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; if (md+1>n) break; 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 { long long l1=md+1, 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) r=md-1, n=N=l1-1; else { vector<int> res; for (int j=1; j<k; j++) res.push_back(j); res.push_back(l1); answer(res); } } } 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...