Submission #1272558

#TimeUsernameProblemLanguageResultExecution timeMemory
1272558reginoxWatching (JOI13_watching)C++20
100 / 100
483 ms16164 KiB
#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define all(v) begin(v), end(v)
#define pi pair<int, int>
#define vi vector<int>
using namespace std;
const int N = 2e3+3;
int n, p, q, a[N];
int dp[N][N], jp[N][2];

bool ck(int x){
    memset(dp, 0, sizeof(dp));
    a[n+1] = 1e9;
    // cout << x << "\n";
    for(int i = 1; i <= n; i++){
        jp[i][0] = lower_bound(a+1,a+n+1,a[i]+x)-a-1;
        jp[i][1] = lower_bound(a+1,a+n+1,a[i]+x*2)-a-1;

    }
    int mx = 0;
    for(int i = 0; i <= min(p, n); i++){
        for(int j = 0; j <= min(q, n); j++){
            if(i > 0){
                int prv = dp[i-1][j]+1;
                dp[i][j] = max(dp[i][j], jp[prv][0]);
            }
            if(j > 0){
                int prv = dp[i][j-1]+1;
                dp[i][j] = max(dp[i][j], jp[prv][1]);
            }
            mx = max(mx, dp[i][j]);
            // cout << dp[i][j] << " ";
        }
        // cout << "\n";
    }
    if(mx >= n) return true;
    return false;
}

int main(){
  ios_base::sync_with_stdio(0); cin.tie(0);
  cin >> n >> p >> q;
  for(int i = 1; i <= n; i++) cin >> a[i];
  sort(a+1,a+n+1);
  int l = 1, r = 5e8;
  while(l <= r){
    int mid = (l+r)/2;
    if(ck(mid)) r = mid-1;
    else l = mid+1;
  }
  cout << l;
  return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...