제출 #1139810

#제출 시각아이디문제언어결과실행 시간메모리
1139810tmmSwimming competition (LMIO18_plaukimo_varzybos)C++20
10 / 100
238 ms8180 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; const int N_max = 1000005; int n, A, B; vector<int> v; int dp[N_max]; void reading(){ cin >> n >> A >> B; v.resize(n + 1); for(int i = 1; i <= n; i++) cin >> v[i]; sort(v.begin() + 1, v.end()); } int main() { reading(); for(int i = 1; i < A; i++) dp[i] = -1; for(int i = A; i <= n; i++){ if(i < min(2 * A, B)){ dp[i] = v[i] - v[1]; continue; } int L = max(A ,i - B), R = i - A, sol = L; while(L <= R){ int M = (L + R) / 2; if(dp[M] - v[i] + v[M + 1] <= 0){ sol = M; L = M + 1; }else{ R = M - 1; } } dp[i] = v[n] - v[1]; if(i <= B)dp[i] = v[i] - v[1]; dp[i] = min(dp[i], max(dp[sol], v[i] - v[sol + 1])); if(sol != i - A) dp[i] = min(dp[i], max(dp[sol + 1],v[i] - v[sol + 2])); } cout << dp[n]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...