Submission #1205931

#TimeUsernameProblemLanguageResultExecution timeMemory
1205931minhpkWatching (JOI13_watching)C++20
0 / 100
0 ms396 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; int a, b, c; vector<ll> z; int K; int count_segments(int w, vector<pair<int,int>>& segs){ segs.clear(); int i = 0; while(i < a){ int r = upper_bound(z.begin(), z.end(), z[i] + w - 1) - z.begin() - 1; segs.emplace_back(i, r); i = r + 1; } return segs.size(); } int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cin >> a >> b >> c; K = b + c; z.resize(a); for(int i = 0; i < a; i++) cin >> z[i]; sort(z.begin(), z.end()); int L = 1, R = z.back() - z.front() + 1, best = R; vector<pair<int,int>> best_segs, tmp; while(L <= R){ int mid = (L + R) >> 1; int need = count_segments(mid, tmp); if(need <= K){ best = mid; best_segs = tmp; R = mid - 1; } else { L = mid + 1; } } while((int)best_segs.size() < K) best_segs.emplace_back(-1,-1); vector<int> lens(K); for(int i = 0; i < K; i++){ auto [l,r] = best_segs[i]; if(l == -1) lens[i] = 0; else lens[i] = z[r] - z[l] + 1; } sort(lens.begin(), lens.end(), greater<int>()); for(int i = 0; i < c; i++){ int x = lens[i]; lens[i] = (x + 1) / 2; } int answer = *max_element(lens.begin(), lens.end()); cout << answer << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...