Submission #539161

#TimeUsernameProblemLanguageResultExecution timeMemory
539161astoriaWatching (JOI13_watching)C++14
100 / 100
233 ms15988 KiB
#include <bits/stdc++.h> using namespace std; int N,P,Q; int events[2001], prep[2001], preq[2001], minq[2001][2001]; bool f (int w){ for (int i=N-1; i>=0; i--){ prep[i] = int(lower_bound(events, events+N, events[i]+w)-events); preq[i] = int(lower_bound(events, events+N, events[i]+min(1000000001, 2*w))-events); for (int p=0; p<=P; p++){ /*if (q==0) minp[i][q] = minp[prep[i]-1][q]+1; else minp[i][q] = min(minp[prep[i]-1][q]+1 , minp[preq[i]-1][q-1]);*/ minq[i][p] = 1000000001; if (p>0) minq[i][p] = minq[prep[i]][p-1]; minq[i][p] = min( minq[i][p], minq[preq[i]][p]+1 ); } } if (minq[0][P]<=Q) return true; else return false; } int binarySearch(){ int L=0; int R=1000000001; while (L<R){ int middle = (L+R)/2; if (f(middle)){ R = middle; } else{ L = middle+1; } } return L; } int main(){ cin >> N >> P >> Q; for (int i=0; i<N; i++){ cin >> events[i]; } if ((P+Q)>=N){ cout << 1; return 0; } sort(events,events+N); cout << binarySearch(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...